关于where不能直接使用聚合函数、使用聚合函数就一定要group by吗,sql执行顺序,关于having和where

WHERE子句用于行级过滤,不支持聚合函数,而HAVING用于过滤分组后的结果,可与GROUPBY配合使用。HAVING中可以包含聚合函数,WHERE则不行。不是所有使用聚合函数的SQL查询都需要GROUPBY,只有当与非聚合字段一起出现时才需要。SQL执行顺序大致为:FROM>WHERE>GROUPBY>HAVING>SELECT>DISTINCT>ORDERBY>LIMIT。
摘要由CSDN通过智能技术生成

1,关于where 后面不能直接使用聚合函数

where属于行级过滤,后面不能直接使用聚合函数!(聚合函数考虑放在having后面/变成子查询放在where后面)。因为聚集函数也叫列函数,它们都是基于整列数据进行计算的,而where子句则是对整行数据进行过滤的

 where的过滤是最终的,它的移除是不可挽回的,利用where过滤掉的行便不再参与group by 的分组和having的分组过滤。

2,having:过滤分组,与 group by 连用,不能单独使用。

having中可以是普通条件的筛选,也能是聚合函数。而where只能是普通函数,一般情况下,有having可以不写where,把where的筛选放在having里,SQL语句看上去更丝滑。

使用where再group by

先把不满足where条件的数据删除,再去分组

使用group by再having

先分组再删除不满足having条件的数据,这两种方法有区别吗,几乎没有!

注意:不同的是,having语法支持聚合函数,其实having的意思就是针对每组的条件进行筛选。我们之前看到了普通的筛选条件是不影响的,但是having还支持聚合函数,这是where无法实现的。

3,SQL中只要用到聚合函数就一定要用到group by吗

答案:

1、当只做聚集函数查询时候,就不需要进行分组了。
2、当聚集函数和非聚集函数出现在一起时,需要将非聚集函数进行group by

举例来说:
情况一:
不需要使用Group by 进行分组,因为其中没有非聚合字段,所以不用Group by 也可以。
SELECT SUM(bonus) FROM person

情况二:
SELECT SUM(bonus),gender FROM person GROUP BY gender

由于gender是非聚合字段,Group by 后才可以正常执行。

注意:分组聚合一定不要忘记加上 group by ,不然只会有一行结果。

4.SELECT语句的执行顺序(在MySQL和Oracle中,SELECT执行顺序基本相同):

FROM > WHERE > GROUP BY > HAVING > SELECT的字段 > DISTINCT > ORDER BY > LIMIT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值