SQL—分组
题目
有一个courses 表 ,有: student (学生) 和 class (课程)。
请列出所有超过或等于5名学生的课。
例如,表:
+---------+------------+
| student | class |
+---------+------------+
| A | Math |
| B | English |
| C | Math |
| D | Biology |
| E | Math |
| F | Computer |
| G | Math |
| H | Math |
| I | Math |
+---------+------------+
应该输出:
+---------+
| class |
+---------+
| Math |
+---------+
说明:学生在每个课中不应被重复计算
预备知识
①
GROUP BY语句通常与集合函数(COUNT,MAX,MIN,SUM,AVG)一起使用,以按一个或多个列对结果集进行分组。
select COUNT(字段) as 个数,字段a from 表名 group by 字段a
②
-
HAVING 子句对 GROUP BY 子句设置条件的方式
与 WHERE 和 SELECT 的交互方式类似。 -
WHERE 搜索条件在进行分组操作之前应用;
而 HAVING 搜索条件在进行分组操作之后应用。 -
HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。
HAVING 子句可以引用选择列表中显示的任意项。
思路
1. 先按照class分组
2. 组内计算非重复学生个数
代码
select class
from courses
group by class
having count(DISTINCT student)>=5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/classes-more-than-5-students