题目描述

(通过次数137,817 | 提交次数278,910,通过率49.41%)

表:Courses
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| student | varchar |
| class | varchar |
+-------------+---------+
(student, class)是该表的主键列。
该表的每一行表示学生的名字和他们注册的班级。
编写一个SQL查询来报告 至少有5个学生 的所有班级。
以 任意顺序 返回结果表。
查询结果格式如下所示。
示例 1:
输入:
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个学生,所以我们不包括它。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/classes-more-than-5-students
表:Courses +-------------+---------+ | Column Name | Type | +-------------+---------+ | student | varchar | | class | varchar | +-------------+---------+ (student, class)是该表的主键列。 该表的每一行表示学生的名字和他们注册的班级。 编写一个SQL查询来报告 至少有5个学生 的所有班级。 以 任意顺序 返回结果表。 查询结果格式如下所示。 示例 1: 输入: 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个学生,所以我们不包括它。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/classes-more-than-5-students
表:Courses
+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| student     | varchar |
| class       | varchar |
+-------------+---------+
(student, class)是该表的主键列。
该表的每一行表示学生的名字和他们注册的班级。

编写一个SQL查询来报告 至少有5个学生 的所有班级。
以 任意顺序 返回结果表。

查询结果格式如下所示。
示例 1:

输入: 
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个学生,所以我们不包括它。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/classes-more-than-5-students
//测试数据
Create table If Not Exists Courses (student varchar(255), class varchar(255));
insert into Courses (student, class) values ('A', 'Math');
insert into Courses (student, class) values ('B', 'English');
insert into Courses (student, class) values ('C', 'Math');
insert into Courses (student, class) values ('D', 'Biology');
insert into Courses (student, class) values ('E', 'Math');
insert into Courses (student, class) values ('F', 'Computer');
insert into Courses (student, class) values ('G', 'Math');
insert into Courses (student, class) values ('H', 'Math');
insert into Courses (student, class) values ('I', 'Math');
//测试数据 Create table If Not Exists Courses (student varchar(255), class varchar(255)); insert into Courses (student, class) values ('A', 'Math'); insert into Courses (student, class) values ('B', 'English'); insert into Courses (student, class) values ('C', 'Math'); insert into Courses (student, class) values ('D', 'Biology'); insert into Courses (student, class) values ('E', 'Math'); insert into Courses (student, class) values ('F', 'Computer'); insert into Courses (student, class) values ('G', 'Math'); insert into Courses (student, class) values ('H', 'Math'); insert into Courses (student, class) values ('I', 'Math');
//测试数据
Create table If Not Exists Courses (student varchar(255), class varchar(255));

insert into Courses (student, class) values ('A', 'Math');
insert into Courses (student, class) values ('B', 'English');
insert into Courses (student, class) values ('C', 'Math');
insert into Courses (student, class) values ('D', 'Biology');
insert into Courses (student, class) values ('E', 'Math');
insert into Courses (student, class) values ('F', 'Computer');
insert into Courses (student, class) values ('G', 'Math');
insert into Courses (student, class) values ('H', 'Math');
insert into Courses (student, class) values ('I', 'Math');

解题思路

Courses表中保存了每个班级的每一名学生。

题目要求:查询出至少有5名学生的班级。

首先,我们需要计算出每个班级的学生人数,使用GROUP BY+COUNT可以实现。

然后,过滤出学生人数大于等于5的班级。

一般来说,可以在第一步的结果集外套一层子查询,然后使用WHERE子句来过滤。不过,我们也可以使用HAVING子句,从汇总统计结果中直接过滤出需要的数据。这种写法更简洁、更高效。

参考SQL

未特别说明的情况下,参考SQL为基于MySQL8.0实现。
select
class
from Courses
group by class
having count(1)>=5;
select class from Courses group by class having count(1)>=5;
select
    class
from Courses
group by class
having count(1)>=5;
picture loss