每天學點SQL(007) GROUP BY 子句

視頻加載中...

視頻約90秒。碎片時間,關注收藏。


GROUP BY

GROUP BY 語句經常與聚合函數一起使用,根據一個或多個列對結果集進行分組。

GROUP BY 語法

<code>SELECT 列名1,聚合函數(列名2)
FROM 表名
GROUP BY 列名1/<code>

在 SELECT 子句中包含聚合函數不是強制性的。如果使用聚合函數,它將計算每個組的彙總值。

如果要在分組之前過濾行,需使用 WHERE子 句;如果要過濾組,請使用 HAVING 子句。

換句話說,WHERE 子句應用於行,而 HAVING 子句應用於分組。

GROUP BY 子句中出現的列為分組列。如果分組列中包含 NULL 值,則所有的 NULL 值都彙總到一個分組中,因為GROUP BY子句認為NULL值相等

另外,要對組進行排序,需要在 GROUP BY 子句之後添加 ORDER BY 子句。

GROUP BY 使用示例

假設表名students包含以下幾個字段:

每天學點SQL(007) GROUP BY 子句

其中,各字段定義為:sid為學生ID、name為姓名、gender為性別,age為年齡,province為所在省份,city為所在城市,district為所在區 (NULL表示未上報)。

GROUP BY與聚合函數配合使用

<code>SELECT gender, COUNT(sid) AS s_cnt 
FROM students 
GROUP BY gender/<code>

該語句查詢男女生分別有多少人。關於聚合函數可參考聚合函數的使用

每天學點SQL(007) GROUP BY 子句

GROUP BY 與 ORDER BY 配合使用

<code>SELECT age, COUNT(sid) AS s_cnt 
FROM students 
GROUP BY age
ORDER BY age DESC/<code>

該語句查詢各年齡組分別有多少學生,同時結果集按年齡組降序排列。關於聚合函數可參考排序函數的使用

每天學點SQL(007) GROUP BY 子句

GROUP BY 與 HAVING 配合使用

<code>SELECT province, COUNT(sid) AS s_cnt 
FROM students 
GROUP BY province
HAVING s_cnt >= 2
ORDER BY s_cnt /<code>

該語句查詢學生人數至少為2人的省份,同時按學生人數升序排列。

每天學點SQL(007) GROUP BY 子句

GROUP BY 按多列進行分組

<code>SELECT gender, age, COUNT(sid) AS s_cnt 
FROM students 
GROUP BY gender, age
ORDER BY gender, age/<code>

該語句分別計算男女生中各年齡組的人數,並按性別組和年齡組升序排列。

每天學點SQL(007) GROUP BY 子句


碎片時間,關注收藏。

每天學點SQL(007) GROUP BY 子句


往期視頻:

每天學點SQL(001) SELECT語句

每天學點SQL(002) DISTINCT語句

每天學點SQL(003) WHERE子句

每天學點SQL(004) AND 或 OR

每天學點SQL(005) ORDER BY語句

每天學點SQL(006) 聚合函數


分享到:


相關文章: