一、问题描述
表: Courses
+-------------+---------+| Column Name | Type |+-------------+---------+| student | varchar || class | varchar |+-------------+---------+(student, class)是该表的主键列。该表的每一行表示学生的名字和他们注册的班级。
复制代码
编写一个 SQL 查询来报告 至少有 5 个学生 的所有类。
以 任意顺序 返回结果表。
查询结果格式如下所示。
题目链接:超过5名学生的课
二、题目要求
样例
输入: Courses table:+---------+----------+| student | class |+---------+----------+| A | Math || B | English || C | Math || D | Biology || E | Math || F | Computer || G | Math || H | Math || I | Math |+---------+----------+输出: +---------+ | class | +---------+ | Math | +---------+解释: -数学课有6个学生,所以我们包括它。-英语课有1名学生,所以我们不包括它。-生物课有1名学生,所以我们不包括它。-计算机课有1个学生,所以我们不包括它。
复制代码
考察
三、问题分析
题目要求我们求出选的课程学生数目至少超过5名学生的课程名称,注意题目里面没说一个学生只能选一门课程,也可以选择多门课程学习,所以我们要用到distinct进行唯一性操作。
我们使用聚合函数对表中的数据进行操作,依照class进行分类,输出的结果如下表所示:
| class | COUNT(student) ||----------|----------------|| Biology | 1 || Computer | 1 || English | 1 || Math | 6 |
复制代码
到这里已经可以很清晰的看出来了,只有最后一行课程Math的数据记录才符合题目的要求,所以对表进行聚合的操作之后,还需要使用having筛选出数量大于 5 的课程。
四、编码实现
select classfrom Coursesgroup by class --聚合函数,依据classhaving count(distinct student)>=5 --筛选数量大于5
复制代码
五、测试结果
评论