SQL 分群語法 列出至少有五位學生的課程 Leetcode #596

閱讀時間約 3 分鐘

題目敘述

題目會給我們一張Courses資料表,裡面分別有student、class等欄位。其中(student, class) 是這張資料表的複合主鍵Primary key pair。


要求我們,以課程做分群列出至少有五位同學的課程。

輸出的順序不拘

Table: Courses

+-------------+---------+
| Column Name | Type |
+-------------+---------+
| student | varchar |
| class | varchar |
+-------------+---------+
(student, class) is the primary key (combination of columns with unique values) for this table.
Each row of this table indicates the name of a student and the class in which they are enrolled.

詳細的題目可在這裡看到


約束條件

以課程做分群列出至少有五位同學的課程。


演算法1-分群

這題主要的考點落在分群,可以使用經典的SQL 分群語法去解開

SELECT ...欄位 FROM ...表格 WHERE ...條件

GROUP BY ...分群的依據欄位

HAVING ...過濾的條件


這題已經要求針對課程去做分群

所以使用 GROUP by class

同時,要求列出的課程必須有至少五位學生

所以使用HAVING COUNT(student) >= 5


程式碼1-分群

 class SoSELECT class
FROM Courses
GROUP by class
# Select those classes which have at least 5 students for each single class.
HAVING COUNT(student) >= 5;

演算法2-子查詢

也可以用前面學過的SQL subquery子查詢語法,相當於先建出一張臨時表,包含課程和和每堂課程對應的學生總數。接著,再列出至少有五位學生的課程,即為所求。

SELECT ...欄位

FROM (課程和和每堂課程對應的學生總數的臨時表)

WHERE ...欄位 ... 做條件判斷(至少有五位學生的課程)

Subquery教學


程式碼2-子查詢

SELECT class
FROM(
SELECT class, COUNT(student) as class_std_num
FROM Courses
GROUP BY class
) AS class_st_table
WHERE class_std_num >= 5;

關鍵知識點:

看到分群 想到GROUP BY ... HAVING ...條件的語法。

可以同步複習 SQL分群語法 列出活躍使用者 Leetcode #1141這一題,鞏固分群GROUP BY的語法和知識點


另外,條條大路通羅馬,一題多解,也可以用前面學過的子查詢語法,先建立臨時表,再從臨時表裡面撈資料。

(當覺得一步到位很難的時候,可以先拆成臨時表,再從臨時表裡面去查詢撈資料)

可以同步複習 SQL子查詢語法 產品銷售分析III Leetcode #1070 這一題,鞏固子查詢的語法和知識點


Reference:

[1] MySQL with GROUP BY ... HAVING ... condition syntax [w/ comment] - Classes More Than 5 Students - LeetCode

52會員
318內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!