题目
有一个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 |
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/classes-more-than-5-students
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路分析
此题有个陷阱, 即表中可以插入重复的记录. 因此我们可以得到如下的两个方法:
方法1
我们可以先对记录去重, 去重完毕后根据class
分组, 后 having
根据每个分组当中不同的id
数量进行过滤, 代码如下
select class
from (select distinct * from courses) as c
group by class
having count(student) >= 5;
方法2
先根据class
进行分组, 分组完毕后针对每个分组当中可能重复的id
使用distinct
关键字即可.
select class
from courses
group by class
having count(distinct student)>=5;