Leetcode596. 超过5名学生的课(简单)

题目
有一个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    |
+---------+

Note:
学生在每个课中不应被重复计算。

审题
题目最后在强调,学生在每个课中不应被重复计算。
就是如果存在重修的情况比如有两个(A, 'Math') 这时需要考虑去重
这是一个坑,剩下的应该就没什么了

自己的解答
先对数据进行去重 将其作为临时表tmp

(select distinct * 
from courses) tmp

对于tmp 对class进行分组 再利用having进行分组筛选

select tmp.class
from (select distinct * 
from courses) tmp
group by tmp.class
having count(tmp.class) >=5;

通过咯 一定要注意需要去重的坑

别的方法
不用子查询也可以实现的

许多人没有考虑到去重高的情况就会得到如下答案

select tmp.class
from courses
group by tmp.class
having count(class) >=5;

其实对这个进行一个修正也可以达到去重的目的
分组后筛选统计学生的数量也是可行的 再对学生进行去重就达到了我们的目的

select class
from courses
group by class
having count(distinct student) >=5;

这个显然是最好的答案

你可能感兴趣的:(Leetcode596. 超过5名学生的课(简单))