持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情
一、问题描述
表: 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个学生,所以我们不包括它。
考察
1.聚合函数
2.建议用时10~25min
三、问题分析
题目要求我们求出选的课程学生数目至少超过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