MySQL分组查询

HAVING关键字,指定条件表达式,对分组后的内容进行过滤

GROUP BY,一般和聚合函数一起使用

GROUP BY子句必须出现在WHERE子句之后, ORDER BY子句之前。
HAVING关键字和WHERE关键字的作用相同,都是用于设置条件表达式,对查询结果进行过滤。

两者的区别,HAVING关键字后,可以跟聚合函数,而WHERE关键字不能,通常情况下,HAVING关键字,都是和GROUP BY一起使用,用于对分组后的结果进行过滤

SELECT COUNT(*),sex FROM db_employee GROUP BY sex

根据性别进行分组,将性别相同的放在一起 最后自动统计数目

给count(*)起个别名

SELECT sex,COUNT(*) as number FROM db_employee GROUP BY sex

除了能用GROUP BY分组数据外, MySQL还允许过滤分组,规定包括哪些分组,排除哪些分组。可以通过 HAVING实现。HAVING非常类似于WHERE。事实上,之前所有类型的WHERE子句都可以用HAVING来替代。唯一的差别是WHERE过滤行,而HAVING过滤分组。HAVING支持所有WHERE操作符。

SELECT子句的书写顺序和执行顺序
Select子句书写顺序:
Select … from tbl1, tbl2 where … group by … having ……order by (asc | desc )
当SELECT语句被DBMS执行时,其子句会按照固定的先后顺序执行: 
(1)FROM  子句。 
(2)WHERE 子句。 
(3)GROUP BY 子句。 
(4)HAVING 子句。 
(5)SELECT 子句。 
(6)ORDER BY 子句。 
基本的工作原理:FROM子句先被执行,通过FROM子句获得一个虚拟表,然后通过WHERE子句从虚拟表中获取满足条件的记录,生成新的虚拟表。将新虚拟表中的记录通过GROUP BY子句分组后得到更新的虚拟表,而后HAVING子句在最新的虚拟表中筛选出满足条件的记录组成另外一个虚拟表中,SELECT子句会将指定的列提取出来组成更新的虚拟表,最后ORDER BY子句对其进行排序得出最终的虚拟表。通常这个最终的虚拟表被称为查询结果集。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值