視頻加載中...
視頻約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,包含以下幾個字段:
其中,各字段定義為: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>
該語句查詢男女生分別有多少人。關於聚合函數可參考聚合函數的使用。
GROUP BY 與 ORDER BY 配合使用
<code>SELECT age, COUNT(sid) AS s_cnt FROM students GROUP BY age ORDER BY age DESC/<code>
該語句查詢各年齡組分別有多少學生,同時結果集按年齡組降序排列。關於聚合函數可參考排序函數的使用。
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人的省份,同時按學生人數升序排列。
GROUP BY 按多列進行分組
<code>SELECT gender, age, COUNT(sid) AS s_cnt FROM students GROUP BY gender, age ORDER BY gender, age/<code>
該語句分別計算男女生中各年齡組的人數,並按性別組和年齡組升序排列。
碎片時間,關注收藏。
往期視頻: