SQl基础_为聚合结果指定条件 HAVING

学习重点

  • 使用count() 函数等对表中数据进行聚合操作时,为其指定条件的不是where 子句,而需要使用having子句。
  • 聚合函数可以在select子句、having子句和order by子句中使用。
  • having子句要写在group by 子句之后。
  • where子句用来指定数据行的条件,having子句用来指定分组的条件。

having子句
使用having 子句时select 语句的顺序
select → from → where → group by → having
having子句要写group by 子句之后。
举例:

select shohin_bunrui, count(*)
	from shohin
	group by shohin_bunrui
	having count(*) = 2;

执行结果
MySQL having
含义:在group by的基础上对组进行条件查询(在此是满足出现2次/行的数据便是‘衣服’和‘办公用品’)
如果不适用having执行结果
mysql having
示例2:
不使用having 观察执行结果

select shohin_bunrui, avg(hanbai_tanka)
	from shohin
	group bu shohin_bunrui;


使用having 观察执行结果

select shohin_bunrui, avg(hanbai_tanka)
	from shohin
	group bu shohin_bunrui
	having avg(hanbai_tanka) >= 2500;


having子句的结构要素
能够使用的要素有三种
· 常数
· 聚合函数
· group by 子句中指定的列名(即聚合键)

错误示范:

select shohin_bunrui, count(*)
	from shohin
	group by shohin_bunrui
	having shohin_mei = '圆珠笔'


上面的示例证明 shohin_mei 并没有在group by 内被定义

辅助理解: having 作为对group by 内的条件查询,把一次聚合后的结果作为having子句起十点的话更容易理解。

相对于having子句,更适合写在where子句中的条件
原表中作为聚合键的列也可以在having子句中使用,

示例:

select shohin_bunrui, count(*)
	from shohin
	group by shohin_bunrui
	having shohin_bunrui = '衣服'

执行结果:

提示:
虽然where 和 having所查询的结果一样但是,我个人认为聚合键所对应的条件还是应该书写在where子句中。聚合键所对应的条件不应该书写在having子句当中,而应该书写在where子句当中。
where子句 = 指定行所对应的条件
having子句 = 指定组所对应的条件

关于where 与 having 执行速度可阅读下方文章
https://blog.csdn.net/xdzcz/article/details/49078613

where和having执行速度

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值