正在加载内容…
MySQL 排序分页与聚合查询
537 字
3 分钟
MySQL 排序分页与聚合查询
本文讲解MySQL排序、分页、聚合、分组及分组后过滤,说明各子句执行顺序,并辨析WHERE与HAVING、两种COUNT用法的差异。
第6章 排序、分页与聚合查询
6.1 排序 ORDER BY
ORDER BY 对查询结果排序,ASC 升序(默认)、DESC 降序:
SELECT * FROM student ORDER BY age DESC;多字段排序时,先按第一个字段排,相同再按第二个字段排:
SELECT * FROM student ORDER BY class_id ASC, age DESC;6.2 分页 LIMIT
LIMIT 限制返回的行数,常配合 OFFSET 实现分页:
SELECT * FROM student LIMIT 5; -- 前 5 行SELECT * FROM student LIMIT 5 OFFSET 10; -- 跳过 10 行,取 5 行简写形式 LIMIT 偏移量, 行数:
SELECT * FROM student LIMIT 10, 5; -- 等价于 OFFSET 10 取 5分页公式:第 n 页(从 1 开始)每页 m 条,则 LIMIT (n-1)*m, m。
6.3 聚合函数
聚合函数对一组值做统计,常用五个:
SELECT COUNT(*) FROM student; -- 记录总数SELECT COUNT(email) FROM student; -- email 非空的行数SELECT SUM(age) FROM student; -- 年龄总和SELECT AVG(age) FROM student; -- 平均年龄SELECT MAX(age), MIN(age) FROM student; -- 最大、最小年龄注意 COUNT(*) 统计所有行,COUNT(字段) 会忽略该字段为 NULL 的行。
6.4 分组 GROUP BY
GROUP BY 按某字段分组,常与聚合函数搭配,用于”按组统计”:
SELECT class_id, COUNT(*) AS 人数 FROM student GROUP BY class_id;这条语句按班级分组,统计每个班的人数。分组后,SELECT 里通常只能出现分组字段和聚合函数。
6.5 分组后过滤 HAVING
WHERE 在分组前过滤行,HAVING 在分组后过滤组:
SELECT class_id, COUNT(*) AS 人数FROM studentGROUP BY class_idHAVING COUNT(*) > 3;它筛选出人数超过 3 的班级。执行顺序可概括为:
flowchart LR
A[FROM] --> B[WHERE 过滤行]
B --> C[GROUP BY 分组]
C --> D[HAVING 过滤组]
D --> E[SELECT 投影]
E --> F[ORDER BY 排序]
F --> G[LIMIT 分页]
6.6 常见问题 Q&A
Q1:WHERE 和 HAVING 的区别? A:WHERE 在分组前过滤行,HAVING 在分组后过滤组;HAVING 常配合聚合函数,WHERE 不能直接用聚合函数。
Q2:COUNT(*) 和 COUNT(字段) 有何不同? A:COUNT(*) 统计所有行,COUNT(字段) 忽略该字段为 NULL 的行。
Q3:GROUP BY 后 SELECT 能写普通字段吗? A:只能写分组字段和聚合函数,写其他普通字段结果无意义,严格模式下会报错。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
MySQL 排序分页与聚合查询
https://mjzy.tech/posts/mysql/06-排序分页与聚合查询/ 相关文章 智能推荐
1
MySQL 分组查询与子查询
MySQL 讲解MySQL分组查询与子查询:用GROUP BY配合聚合、HAVING及WITH ROLLUP做分组汇总;子查询按结果分为四类,可用于WHERE、FROM、SELECT及EXISTS相关判断。
2
MySQL SELECT 基础查询与 WHERE
MySQL 本文讲解SELECT基础查询与WHERE过滤,涵盖字段选择、别名、DISTINCT去重、比较与逻辑运算、范围、集合、模糊和空值判断,并说明WHERE不能直接使用SELECT别名。
3
MySQL 联表查询 JOIN
MySQL 本文讲解MySQL联表查询,说明内连接、左右连接及自连接与子查询的用法,并辨析ON与WHERE的区别。
4
MySQL 数据库与表基础
MySQL 本文介绍MySQL建库建表基础,涵盖数据库分类、常用数据类型及主键、非空、唯一等约束,并用问答说明选型与开发要点。
5
MySQL 多表关系与外键
MySQL MySQL数据库通过拆表减少冗余,利用一对多、多对多、一对一三种表关系,并通过外键约束及级联、置空等联动行为保证引用完整性。
随机文章 随机推荐
评论区
正在加载 GitHub 评论…