有一个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:
学生在每个课中不应被重复计算。
答案:
select class from courses group by class having count(distinct student)>=5;
这里第一是group by的用法,按照什么去分成类别
分了类之后,having的用法,having在group by这里就可以当成where来看了
最后是count的用法, count分成三类吧,count(*),count(列名),count(distinct 列名),如果没有异常的话,count(*)基本也就够用了。
count(列名)基本和count(*)作用是一样的,因为这一count列名,实际上也就是count了一整列,写了列名的话,最好再加一个distinct,排除有两条一模一样的记录这种可能性。