一、GROUP_CONCAT
如图所示,是一个成绩表。
通过SQL:
SELECT
classId AS 班级,
count( * ) AS 人数,
GROUP_CONCAT( NAME ) AS 学生
FROM
`score`
GROUP BY
classId
可以查询每个班的人数以及全部学生名字。
二、Having
接上面的学生表,添加集合函数AVG(),查询每个班级的平均分。
SQL:
SELECT
classId AS 班级,
count( * ) AS 人数,
GROUP_CONCAT( NAME ) AS 学生,
AVG( score ) AS 平均分
FROM
`score`
GROUP BY
classId
结果:
如果要查询平均分大于90的班级,是不可以直接加where AVG(score) > 90的,因为SQL存在运行顺序.
运行顺序是WHERE > GROUP BY > AVG(),因此where条件判断先于聚合函数AVG(),所以会报错。使用Having可以解决这一问题。
SQL:
SELECT
classId AS 班级,
count( * ) AS 人数,
GROUP_CONCAT( NAME ) AS 学生,
AVG( score ) AS 平均分
FROM
`score`
GROUP BY
classId
HAVING
AVG( score ) > 90
结果: