我是一名立志把细节说清楚的博主,欢迎【关注】🎉 ~
原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~
如有错误、疑惑,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持
数据分组,关键字:GROUP BY
- 如果分组列中具有
NULL
值,则NULL
将作为一个分组返回。如果列中有多行NULL
值,它们将分为一组。 - 如果有
WHERE
关键字,GROUP BY
子句必须出现在WHERE
子句之后。 - 如果有
ORDER BY
关键字,GROUP BY
子句必须出现在ORDER BY
子句之前。
以基础的 WHERE
关键字作为比较对象,查询某一个班级学生数量。
SELECT COUNT(*) AS class_student_number
FROM student
WHERE class_number = 20230001;
输出
+-----------------------+
| class_student_number |
+-----------------------+
| 6 |
+-----------------------+
GROUP BY
使用示例:
SELECT class_number, count(*) AS class_student_number
FROM student
GROUP BY class_number;
输出
+--------------+-----------------------+
| class_number | class_student_number |
+--------------+-----------------------+
| 20230002 | 3 |
| 20230001 | 6 |
| 20230003 | 1 |
+--------------+-----------------------+
过滤分组,关键字:HAVING
过滤 GROUP BY
关键字的分组,需要使用 HAVING
关键字。 HAVING
关键字的作用很类似于 WHERE
关键字。
区别是:
WHERE
关键字过滤行,在数据分组前进行过滤。HAVING
关键字过滤组,在数据分组后进行过滤。WHERE
排除的行不包括在分组中。
我们还使用上面示例数据演示比较:
SELECT s.class_number, count(*) AS class_student_number
FROM student s
GROUP BY s.class_number HAVING class_number != 20230003;
输出
+--------------+-----------------------+
| class_number | class_student_number |
+--------------+-----------------------+
| 20230002 | 3 |
| 20230001 | 6 |
+--------------+-----------------------+
通过和上面没有使用HAVING
关键的查询结果比较,我们发现学生数只有一个的 20230003
班分组数据过滤出去了。
常见 SELECT 子句顺序
子句 | 说明 | 必须使用 |
---|---|---|
SELECT | 要返回的列或表达式 | 是 |
FROM | 要检索的数据表 | 仅在从表中选择数据时使用 |
WHERE | 行级过滤 | 否 |
GROUP BY | 分组 | 仅在按组计算聚集时使用 |
HAVING | 组级过滤 | 否 |
ORDER BY | 返回数据排序 | 否 |
LIMIT | 限制返回结果行数 | 否 |
我是一名立志把细节说清楚的博主,欢迎【关注】🎉 ~
原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~
如有错误、疑惑 ,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持