问题
一张学生表,一张课程表,统计每个课程的人数和对应课程名
课程表t_class表:
| id | name |
|---|---|
| 1 | 数学 |
| 2 | 英语 |
| 3 | 语文 |
学生表t_student表:
| id | name | c_id |
|---|---|---|
| 1 | 张三 | 1 |
| 2 | 李四 | 2 |
| 3 | 王五 | 2 |
| 4 | 赵六 | 3 |
答案分析
将t_class.id = t_student.c_id关联,使用聚合函数count统计各课程人数
SELECT
t_class.`name`,
COUNT(*) AS "课程人数"
FROM
t_class,
t_student
WHERE
t_class.id = t_student.c_id
GROUP BY
t_class.id

注意
这里不能使用Having,因为Having是对查询后的结果过滤,where是对查询前的结果过滤,所以如果将Where替换为Having会报错,因为查询出的字段并没有id,并且Having应该放在group by 后面。
例如,使用Having对查询结果进行筛选,找出人数是1的课程
SELECT
t_class.`name`,
COUNT(*) AS "课程人数"
FROM
t_class,
t_student
WHERE
t_class.id = t_student.c_id
GROUP BY
t_class.id
HAVING
COUNT(*) = 1

本文探讨了如何在MySQL中统计每个课程的学生人数,通过联接学生表和课程表并使用COUNT聚合函数。重点指出WHERE子句应用于原始数据过滤,而HAVING则用于查询结果的过滤,且HAVING必须跟在GROUP BY之后。同时,举例说明了使用HAVING筛选人数为1的课程的情况。
&spm=1001.2101.3001.5002&articleId=131216980&d=1&t=3&u=b0108eb4a1e748fcbd5e5c56c410a45f)
1242

被折叠的 条评论
为什么被折叠?



