MySQL,分组order by

一、创建分组

sql 复制代码
## 创建分组
-- 返回每个发布会的参会人数
SELECT event_id,COUNT(*) as canjia_num FROM sign_guest GROUP BY event_id;

1、group by子句可以包含任意个列,但是但指定的所有列都是一起计算的。
group by 后2个字段一起计算的

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、先过滤行,再过滤分组。

sql 复制代码
## 过滤分组

-- 参会人数大于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元的产品供应商

相关推荐
TDengine (老段)8 小时前
TDengine 常见问题 TOP3
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
螺蛳粉 螺蛳粉10 小时前
MySQL 分布式集群系列 · 第五篇——全方位对比:NDB、MGR、主从复制、分库分表怎么选?
数据库·分布式·mysql
泡泡鱼(敲代码中)12 小时前
MySQL 学习笔记:DCL、函数与约束 —— 安全、效率、完整性的三板斧
开发语言·笔记·sql·学习·mysql·gitee
这个DBA有点耶14 小时前
从OLTP到OLAP到HTAP:数据库负载分类的技术演进与选型指南
数据库·mysql·架构
YangYang9YangYan16 小时前
商业数据分析校招项目怎么选,附项目设计与简历包装思路
大数据·数据库·数据分析
李白客16 小时前
数据库培训怎么选?零基础到DBA的学习路线与机构认证对比(2026)
数据库·学习
shark-chili16 小时前
关于AI辅助编程的认知
数据库·人工智能·redis·macos·缓存
SendTomo16 小时前
.ico透明图标在线生成下载平台深度解析
大数据·数据结构·数据库·数据仓库·个人开发
蓝速科技16 小时前
国产化信创终端等保合规核心防护与落地方案丨蓝速科技
大数据·运维·数据库·人工智能·科技
IvorySQL17 小时前
PostgreSQL 日报|在线校验和特性被回退(9 月 17 日)
数据库·人工智能·postgresql