对group by多字段查询进行一个探究及group by不是表达式解决方案

概述

在做数据统计的时候,经常会用到group by,有时候,还会涉及到对满足条件的多个字段进行分组,在多个字段分组的时候,它是怎么分的呐?我们做个探究

demo

来看数据

在这里插入图片描述
那么,我按两个字段查询,如果,第一个不同,是按第二个查呐?

如果第一个不同,按第二个查的话,那么大米和魅族应该是一组,那么计数的时候,应该为2

以group by id,deleted为例

SELECT 
MAX(id),
COUNT(*)
FROM `tb_brand`
WHERE id BETWEEN 1 AND 9
GROUP BY id,deleted

我们来看结果,
在这里插入图片描述
大米和魅族并没有归为一组,也就是说,应该是没有同时满足条件,所以各是一组。

那么也就是说,在多字段分组的时候,同时满足两个条件的会归为一组对吗?

我们来测一下,

以group by first_char,deleted为例

如果满足条件归为一组,那么大米和魅族应该归为一组,计数时,应该为2

来看

SELECT 
MAX(id),
COUNT(*)
FROM `tb_brand`
WHERE id BETWEEN 1 AND 9
GROUP BY first_char,deleted

在这里插入图片描述

id为8,是魅族的id,COUNT计数为2,也就证明了,group by当有多个字段时,同时满足,多个字段才会归为一组

为何只有一条呐?

group by不是表达式解决方案

因为group by是将符合条件的数据并为一组,一组里只显示一条数据,所以,通常来说,group by是要配合聚合函数一起使用的

select出来的字段都要写到group by中,如果,没写进去的话就会报不是group by表达式错误。可以加个max化解。

比如

在这里插入图片描述

如果用了MAX函数,而MAX中的值要写在GROUP BY中,需要用AS取别名,否则会报group by 表达式错误,TO_CHAR(CREATE_TIME,‘yyyy-MM-dd’)要取别名 CREATE_TIME,否则会报group by 表达式错误

SELECT
TO_CHAR(CREATE_TIME,'yyyy-MM-dd') AS CREATE_TIME
WHERE 1=1
GROUP BY TO_CHAR(CREATE_TIME,'yyyy-MM-dd')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值