SQL每日刷题—分组查询

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

上一篇:Excel VBA(1) Application Object


下一篇:LeetCode查找重复的电子邮箱Swift