MySQL的having子句详解

2018-08-03  本文已影响0人  LannisterWF

示例使用的是MySQL官方数据库sakila

having子句一直是我认为比较难以理解的玩意,但是既然用到了就要把这个玩意弄清楚。

having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。having和where的作用类似,都是提供一个筛选条件。但是这两者最大的不同是where判断的是真实读取的数据,having判断的是调用一些聚合函数计算之后得到的数据。

例如having的一个应用场景

select customer_id,sum(amount) from payment 

group by customer_id

having sum(amount)>100

limit 10;

结果如下

这个having的作用是只显示sum(amount)在100以上的行,此时不能用where,因为sum(amount)并不存在于原表中,这个值是算出来的。

having和where的不同

1.WHERE 子句作用于表和视图,HAVING 子句作用于组。

2.having一般跟在group by之后,执行记录组选择的一部分来工作的。where则是执行所有数据来工作的。

3.where中不能用聚合函数,having总是包含聚合函数。

上一篇 下一篇

猜你喜欢

热点阅读