MySQL超过5名学生的课

Posted willem_chen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL超过5名学生的课相关的知识,希望对你有一定的参考价值。

SQL架构

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');

题目描述

请列出所有超过或等于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 子句和子查询【通过】

思路

先统计每门课程的学生数量,再从中选择超过 5 名学生的课程。

算法

使用 GROUP BY 和 COUNT 获得每门课程的学生数量。

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

注:使用 DISTINCT 防止在同一门课中学生被重复计算。

+----------+-------------------------+
| class    | COUNT(DISTINCT student) |
+----------+-------------------------+
| Biology  |                       1 |
| Computer |                       1 |
| English  |                       1 |
| Math     |                       6 |
+----------+-------------------------+
4 rows in set (0.00 sec)

使用上面查询结果的临时表进行子查询,筛选学生数量超过 5 的课程。

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

+-------+
| class |
+-------+
| Math  |
+-------+
1 row in set (0.00 sec)

方法二:使用 GROUP BY 和 HAVING 条件【通过】

算法

在 GROUP BY 子句后使用 HAVING 条件是实现子查询的一种更加简单直接的方法。

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

+-------+
| class |
+-------+
| Math  |
+-------+
1 row in set (0.00 sec)

以上是关于MySQL超过5名学生的课的主要内容,如果未能解决你的问题,请参考以下文章

mysql 超过5名学生的课

超过5名学生的课

超过5名学生的课

596. 超过5名学生的课

348超过5名学生的课

leetcode596---超过5名学生的课