一、问题描述
表: 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 class
from Courses
group by class --聚合函数,依据class
having count(distinct student)>=5 --筛选数量大于5
复制代码
五、测试结果
评论