2022年10月更文挑战30-4-leetcode刷题596-超过5名学生的课

92 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情

leetcode刷题596-超过5名学生的课

前文

本文内容为leetcode关于数据库查询类型的题目,主要考察对于数据库查询语句的理解,包含分组及分组后的条件控制。本题目的题目序号为596,题目链接为leetcode.cn/problems/cl…

题目信息

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| student     | varchar |
| class       | varchar |
+-------------+---------+

(student, class)是该表的主键列。该表的每一行表示学生的名字和他们注册的班级。编写一个SQL查询来报告 至少有5个学生 的所有班级。

题目分析

根据题目信息可知,我们拥有一张选课表,表中包含课程名以及学生名,该表主要用于反映学生与课程之间的选择关系。每个学生都可以选择多门课,同时每门课可以被多个学生选择。那么根据我们一般情况下的数据库查询,很容易想到对数据进行分组。我们按照课程进行分组,分组后查询出每门课以及该课程对应的学生数目,也就是我们的基础数据。然后可以通过将基础数据作为数据源,从中查找学生数量大于等于5的课程,也就能够查询到我们的目标结果。这个解法也就是我们的解法一,通过子查询的方式。与此同时,由于我们采用了group by进行数据分组,我们也可以直接通过having进行分组后结果的数据筛选。在having语句中将学生数量大于5作为实际的查询条件,直接通过分组的查找方式即可获取到我们题目的目标结果。至此,本题目解答完毕。

题目答案及结果

select a.class from (select class,count(class) as num from Courses group by class) a where a.num >= 5
select class
from Courses
group by class having(count(student)) >= 5

image.png

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。