LeetCode-596. 超过5名学生的课( 596. Classes More Than 5 Students)。

有一个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    |
+---------+
Note:
学生在每个课中不应被重复计算。

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/classes-more-than-5-students

审题:

第一列是学生,第二列是课程。没有重复的学生,所以,每个学生只能上一门课。统计第二列超过五个的课程。

思考:

本题和第一列无关,直接统计第二列超过五个的课程就可以。

解题:

方法一:获取每个班级的学生编号。我们可以使用GROUP BYCOUNT,它非常流行用于统计基于表中的某些字符。

SELECT
    class, COUNT(DISTINCT student)
FROM
    courses
GROUP BY class;

注意:我们DISTINCT在这里使用,因为学生姓名可能在课程中重复,因为在问题描述中提到了它。

 

通过将上述查询作为子查询来查询:查询上表结果中大于5的结果。

SELECT
    class
FROM
    (SELECT
        class, COUNT(DISTINCT student) AS num
    FROM
        courses
    GROUP BY class) AS temp_table
WHERE
    num >= 5;

方法二:方法:使用GROUP BYHAVING条件。关键点在于HAVING的使用。

使用子查询是向GROUP BY子句添加某些条件的一种方法,但是,使用HAVING是另一种更简单和自然的方法。所以我们可以重写上面的解决方案如下。

SELECT
    class
FROM
    courses
GROUP BY class
HAVING COUNT(DISTINCT student) >= 5;

相关知识:

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。

HAVING 子句可以让我们筛选分组后的各组数据。

SQL基本函数,聚合函数对一组值执行计算,并返回单个值,也被称为组函数。 聚合函数经常与 SELECT 语句的 GROUP BY 子句的HAVING一同使用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值