数据库每日一题---第8天:超过5名学生的课

189 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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

五、测试结果

1.png

2.png

19.png