有一个courses 表 ,有: student (学生) 和 class (课程)。
请列出所有超过或等于5名学生的课。
例如,表:
+---------+------------+
| student | class |
+---------+------------+
| A | Math |
| B | English |
| C | Math |
| D | Biology |
| E | Math |
| F | Computer |
| G | Math |
| H | Math |
| I | Math |
+---------+------------+
应该输出:
+---------+
| class |
+---------+
| Math |
+---------+
提示:
学生在每个课中不应被重复计算。
分析:对科目分组,然后对每组计数筛选,需要注意where与having的针对聚合函数使用!
题目easy,就是测试用例courses表竟然可以有重复数据。这不合理好吧。加个distinct解决。
AC代码:
select class from courses
group by class
having count(distinct student)>4
另:想使用where需要包一层临时表
SELECT
class
FROM
(SELECT
class, COUNT(DISTINCT student) AS num
FROM
courses
GROUP BY class) AS temp_table
WHERE
num >= 5
;