聚合函数-为聚合结果指定条件

● 使用COUNT函数等对表中数据进行汇总操作时,为其指定条件的不是WHERE子句,而是HAVING子句。
例如:数据行数为2行,平均值等于500
HAVING子句语法:

select  列名1,列名2,列名3
from 表名
group by  列名1,列名2,列名
having 分组结果对应的条件

使用having 子句在select中的执行顺序:

select  --from ---where----group by ----having

案例:
按照商品分类后,取出包含结果行数为2行的组

select  product_type,count(*) 
from  Product 
group by product_type
having count(*)=2;

HAVING 子句的构成要素:

常数
聚合函数
group by 子句中指定的列名
HAVING子句的不正确使用方法:
select  product_type,count(*)
from Product
group by product_type
having product_name = '办公用品';

product_name 列并不包含在 GROUP BY 子句之中,因此不允许
写在 HAVING 子句里。

相对于HAVING子句, 更适合写在WHERE子句中的条件
将条件书写在HAVING子句中的情况

SELECT product_type, COUNT(*)
 FROM Product
 GROUP BY product_type
HAVING product_type = '衣服';

结果:

product_type | count
衣服          | 2

将条件书写在WHERE子句中的情况

SELECT product_type, COUNT(*)
 FROM Product
WHERE product_type = '衣服'
 GROUP BY product_type;

结果:

product_type | count
衣服          | 2

条件分别写在 WHERE 子句和 HAVING 子句当中,但是条件的内容以及返回的结果都完全相同。

建议书写时:

WHERE 子句 = 指定行所对应的条件
HAVING 子句 = 指定组所对应的条件

补充:
WHERE子句和HAVING子句的执行速度

**为了得到相同的结果,将条件写在 WHERE 子句中要比写在 HAVING 子句中的处理速度更快
返回结果所需的时间更短。
通过 WHERE 子句指定条件时,由于排序之前就对数据进行了过滤,因此能够减少排序的数据量。
但 HAVING 子句是在排序之后才对数据进行分组的,因此与在 WHERE 子句中指定条件比起来,
需要排序的数据量就会多得多。WHERE 子句指定条件所对应的列创建索引,这样也可以大幅提高
处理速度。创建索引是一种非常普遍的提高性能的方法,效果也十分明显
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值