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

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key
題目敘述 題目會給我們一張Activity資料表,裡面分別有user_id、 session_id、activity_date 、activity_type等欄位。 要求我們列出所有過去30天的活躍使用者。 活躍使用者的定義為2019-07-27包含這天,往前三十天的區間內,至少有過一次活動紀錄
題目敘述 題目會給我們一張World資料表,裡面分別有name、 continent、area、population 、gdp等欄位,其中name 是主鍵Primary Key。 要求我們列出所有大型國家,大型國家的定義是 人口大於等於兩千五百萬人 或者 土地面積大於等於三百萬平方公里。 輸出順
題目敘述 題目會給我們一張Cinema資料表,裡面分別有id、movie、description, rating 等欄位,其中id 是主鍵Primary Key。 要求我們列出所有推薦人ID為奇數,而且不無聊的電影,印出時依照電影rating評分從高到低降序排列。 Table: Cinema
題目敘述 題目會給我們一張Customer資料表,裡面分別有id、name、referee_id 等欄位,其中id 是主鍵Primary Key。 要求我們列出所有推薦人ID referee_id不等於2的顧客,印出順序不拘。
題目會給我們一張Products資料表,裡面分別有product_id、low_fats、recyclable等欄位,其中product_id 是主鍵Primary Key。 要求我們列出所有的可回收 且 低脂產品的product_id,順序不拘。
題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key
題目敘述 題目會給我們一張Activity資料表,裡面分別有user_id、 session_id、activity_date 、activity_type等欄位。 要求我們列出所有過去30天的活躍使用者。 活躍使用者的定義為2019-07-27包含這天,往前三十天的區間內,至少有過一次活動紀錄
題目敘述 題目會給我們一張World資料表,裡面分別有name、 continent、area、population 、gdp等欄位,其中name 是主鍵Primary Key。 要求我們列出所有大型國家,大型國家的定義是 人口大於等於兩千五百萬人 或者 土地面積大於等於三百萬平方公里。 輸出順
題目敘述 題目會給我們一張Cinema資料表,裡面分別有id、movie、description, rating 等欄位,其中id 是主鍵Primary Key。 要求我們列出所有推薦人ID為奇數,而且不無聊的電影,印出時依照電影rating評分從高到低降序排列。 Table: Cinema
題目敘述 題目會給我們一張Customer資料表,裡面分別有id、name、referee_id 等欄位,其中id 是主鍵Primary Key。 要求我們列出所有推薦人ID referee_id不等於2的顧客,印出順序不拘。
題目會給我們一張Products資料表,裡面分別有product_id、low_fats、recyclable等欄位,其中product_id 是主鍵Primary Key。 要求我們列出所有的可回收 且 低脂產品的product_id,順序不拘。
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Day9-11 這幾天如火如荼地學寫資料庫,從最一開始的SELECT單一欄位數值 SELECT eyes FROM body (???)
Thumbnail
終於來到大了,通常大二就是開始班上的分崩離析,畢竟有人打算做Class的考試, 有些人開始選修課程,有些人被二一永遠當學弟,有些人開始翹課,而不對翹課從大一就開始了,基本上我們A班比較不團結,將近有3分之一的人離開我們科系,相對的也有人進入我們科系,但目標很簡單能夠混到一張畢業證書,所以水準整體有
Thumbnail
※ GROUP BY 用於將數據表中的數據按照一個或多個列進行分組。例如在處理一個表格的資料時,可以指定欄位,一個或是多個,然後把將其視為ID進行分組處理。 ※ 語法 SELECT column1, column2, ..., aggregate_function(column) FROM
Thumbnail
在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
Thumbnail
通常,課業輔導/學習扶助的教學現場情境為1個班級10個人以內的學生,個人教導、兩人一組或三人一組為適宜,合作學習策略主要是以「精熟學習內容」為主、「引導主題探究」與「促進分享討論」為輔,增加多元的機會和可能。
如何在SQL實踐中EXCEL 常用功能 篩選 和 擷取文字串?需要熟練地使用分組(GROUP BY) 與 排序 (ORDER BY) 以及SUBSTRING_INDEX函數!
Thumbnail
學生一群群的聚在一起交頭接耳, 早自習、 下課、 午休…… #導師的修煉 之 努力不讓拒學發生 不是只有一天這樣, 有時連續數天, 有時斷斷續續數天。 有時是自己班的同學而已, 有時還有其他班的同學, 有時還有其他年段的學長姐! 有時很小群, 有時很大群。
Thumbnail
本文將介紹 SQL 中的連接(JOIN),連接(JOIN)是用於結合來自兩個或多個資料表的相關數據,建議讀過我之前發佈的幾篇"SQL學習筆記"之後再來看這篇。
Thumbnail
※ 資料庫與 SQL ※ 題目: 請寫出 SQL 讀取 people table 中所有 gender 是 M 而且 age 大於 18 的資料。 ※ 解答: SELECT * FROM people WHERE gender = 'M' AND a
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Day9-11 這幾天如火如荼地學寫資料庫,從最一開始的SELECT單一欄位數值 SELECT eyes FROM body (???)
Thumbnail
終於來到大了,通常大二就是開始班上的分崩離析,畢竟有人打算做Class的考試, 有些人開始選修課程,有些人被二一永遠當學弟,有些人開始翹課,而不對翹課從大一就開始了,基本上我們A班比較不團結,將近有3分之一的人離開我們科系,相對的也有人進入我們科系,但目標很簡單能夠混到一張畢業證書,所以水準整體有
Thumbnail
※ GROUP BY 用於將數據表中的數據按照一個或多個列進行分組。例如在處理一個表格的資料時,可以指定欄位,一個或是多個,然後把將其視為ID進行分組處理。 ※ 語法 SELECT column1, column2, ..., aggregate_function(column) FROM
Thumbnail
在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
Thumbnail
通常,課業輔導/學習扶助的教學現場情境為1個班級10個人以內的學生,個人教導、兩人一組或三人一組為適宜,合作學習策略主要是以「精熟學習內容」為主、「引導主題探究」與「促進分享討論」為輔,增加多元的機會和可能。
如何在SQL實踐中EXCEL 常用功能 篩選 和 擷取文字串?需要熟練地使用分組(GROUP BY) 與 排序 (ORDER BY) 以及SUBSTRING_INDEX函數!
Thumbnail
學生一群群的聚在一起交頭接耳, 早自習、 下課、 午休…… #導師的修煉 之 努力不讓拒學發生 不是只有一天這樣, 有時連續數天, 有時斷斷續續數天。 有時是自己班的同學而已, 有時還有其他班的同學, 有時還有其他年段的學長姐! 有時很小群, 有時很大群。
Thumbnail
本文將介紹 SQL 中的連接(JOIN),連接(JOIN)是用於結合來自兩個或多個資料表的相關數據,建議讀過我之前發佈的幾篇"SQL學習筆記"之後再來看這篇。
Thumbnail
※ 資料庫與 SQL ※ 題目: 請寫出 SQL 讀取 people table 中所有 gender 是 M 而且 age 大於 18 的資料。 ※ 解答: SELECT * FROM people WHERE gender = 'M' AND a