1. 程式人生 > 資料庫 >SQL每日刷題—分組查詢

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