如果你需要对查询出来的结果表再次进行聚合操作,可以使用嵌套子查询的方式实现。具体语法如下:
SELECT [聚合函数](子查询结果) FROM (
SELECT ... FROM ... WHERE ...
) AS 别名 GROUP BY ...
其中,内层 SELECT 语句用于获取需要进行聚合操作的数据集,外层 SELECT 语句用于对内层查询的结果进行聚合操作。需要注意的是,在外层 SELECT 语句中必须要有 GROUP BY 子句。
举个例子,假设我们有一个学生成绩表 score 包含三个字段:id、name 和 score。现在我们要求出每个学生最高分数和最低分数的平均值,并按照性别进行分组。可以使用以下 SQL 查询语句实现:
SELECT gender, AVG(max_min_score) FROM (
SELECT name, gender, MAX(score) + MIN(score) AS max_min_score
FROM score JOIN student ON score.id = student.id
GROUP BY name
) AS tmp GROUP BY gender;
解释一下上述 SQL 查询语句:
- 内层查询
SELECT name, gender, MAX(score) + MIN(score) AS max_min_score FROM score JOIN student ON score.id = student.id GROUP BY name获取每个学生最高分数和最低分数之和,并将其命名为max_min_score。 - 外层查询
SELECT gender, AVG(max_min_score) FROM (...) AS tmp GROUP BY gender对内层查询的结果表按照性别进行分组,并计算每个分组中学生最高分数和最低分数之和的平均值。
这样就能够实现将查询出来的结果表再次进行聚合操作了。




