MySQL中GROUP_CONCAT和Having的使用

一、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

结果:

 

猜你喜欢

转载自blog.csdn.net/zh137289/article/details/106182616