MySQL,分组order by
2023-12-16 18:59:02
一、创建分组
## 创建分组
-- 返回每个发布会的参会人数
SELECT event_id,COUNT(*) as canjia_num FROM sign_guest GROUP BY event_id;
1、group by子句可以包含任意个列,但是但指定的所有列都是一起计算的。
2、group by后面可以跟:
? ? ? ? a、检索列(字段名)
? ? ? ? b、有效的表达式,但不能是聚集函数(如:sum()、avg()、min()、max()、count()等)
3、如果select中使用表达式,则group by中也必须使用相同的表达式(不能使用别名)。
4、除了聚集函数外,select中的所有字段,都要在group by中给出。
5、如果分组的列值有NULL,则会将所有NULL分为一组。
二、过滤分组
有一个共识要记在心里,即:
1、where过滤行,having过滤分组;
2、先过滤行,再过滤分组。
## 过滤分组
-- 参会人数大于3的发布会
SELECT event_id,COUNT(*) as canjia_num FROM sign_guest GROUP BY event_id
HAVING canjia_num >3;
-- 还有哪些嘉宾没签到
SELECT event_id FROM sign_guest WHERE sign=0
GROUP BY event_id;
-- 未签到嘉宾大于2的发布会
-- 拆解:
-- a、过滤行,过滤出未签到的嘉宾 --> 过滤行:where sing=0的数据
-- b、分组,每个发布会:group by event_id --> 计总数(每个发布会未签到的嘉宾总数):select子句count()
-- c、过滤分组 --> canjia_num>2
SELECT event_id,COUNT(*) as canjia_num FROM sign_guest WHERE sign=0
GROUP BY event_id
HAVING canjia_num>2;
# 与上一条相同,追加了排序
SELECT event_id,COUNT(*) as canjia_num FROM sign_guest WHERE sign=0
GROUP BY event_id
HAVING canjia_num>2
ORDER BY canjia_num DESC;
Select子句顺序:
1、select --> from 已是共识
2、where 行过滤
3、group by 分组
4、having 分组过滤
5、order by 排序
6、limit 限制检索行数
类似题:有2个订单以上,且订单>=10元的产品供应商
文章来源:https://blog.csdn.net/qq_40384309/article/details/135034828
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!