万叶集 |
---|
🎉 隐约雷鸣,阴霾天空。 🎉 |
🎉 但盼风雨来,能留你在此。 🎉 |
文章目录
该章节来开始学习分组查询,上一章节我们学习了聚合函数,默认统计的是全表范围内的数据,配合上 WHERE 就能够缩小统计的范围了。但是这并不能满足我们的要求,比如说我们按照之前的数据表查询每个部门的平均底薪是多少?这样的记录就需要针对部门编号进行分组了。根据分组的情况统计分组内的最大值、最小值、平均值等等。如此就能够满足刚刚提到的 “查询每个部门的平均底薪” 这样的需求了,另外,“分组查询” 是 SQL 中很重要的一个语法,大家一定要好好掌握它。
🐳 为什么要分组
这里的小数,可能看着不太舒服,我们可以使用 ROUND()
函数将 平均工资四舍五入变成整数。
SELECT deptno, ROUND(AVG(sal))
FROM t_emp
GROUP BY deptno;
🐳 逐级分组
🐬 逐级分组对 SELECT 子句的要求
SQL 示例如下:(不遵守规定示例)
SELECT deptno, COUNT(*), AVG(sal), sal
FROM t_emp
GROUP BY deptno;
-- 这条语句是无法执行成功的,因为在 "SELECT" 子句中,有一个 "sal" 的字段
-- 这个 "sal" 字段 没有在 GROUP BY 中去分组,本身也没有聚合函数,就是一个普通的字段
-- 造成无法执行、报错的原因是因为,"SELECT deptno, COUNT(*), AVG(sal), sal"
-- 中的 "deptno、COUNT(*)、AVG(sal)" 返回的是 "GROUP BY" 一个结果集分组的同级信息;
-- 而 "sal" 字段又是多条匹配记录,前后肯定是匹配不上的,所以这个 SQL 语句是无法执行成功的。
-- 同时因为标准的 SQL 规定,对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:
-- 通过 GROUP BY 子句指定的聚合键、聚合函数(SUM 、AVG 等)、常量。
-- 所以在使用 SQL 语句记性数据表查询时,一定要严格遵守 SQL 的语法规定。
🐬 对分组结果集再次做汇总计算
PS:该 SQL 语句主要是为了体现 "WITH ROLLUP" 关键字的效果,是对聚合函数的再次执行汇总计算。
🐳 GROUP_CONCAT 函数
🐳 GROUP BY 子句的执行顺序