MySQL中使用 group by 對數據進行分組。它必須配合聚合函數進行使用,對數據進行分組後可以執行 count 、 sum 、 avg 、 max 和 min 等操作。
1. 分組的基本使用
下面是一個簡單的示例,將員工表 employee 按照部門 department 進行分組,統計各個部門的人數。
完整的表中數據如下:
使用如下語句對數據進行分組:
SELECT department, Count(*) FROM employee GROUP BY department;
結果如下:
2. 分組過濾
之前我們對數據過濾使用 WHERE 子句, 對於分組後的數據我們使用 HAVING 子句。此時, WHERE 子句表示對分組前數據的過濾。
- WHERE 表示對分組前的數據進行過濾。
- HAVING 表示對分組後的數據進行過濾。
我們想要統計,員工工資不小於10000且部門人數多於1個人的部門統計。
SQL語句可以這麼寫:
SELECT department, Count(*) FROM employee
WHERE salary >= 10000
GROUP BY department
HAVING Count(*) > 1;
結果如下:
3. group_concat的使用
group_concat 配合 group by 一起使用,用於將某一列的值按指定的分隔符進行拼接,MySQL中默認爲逗號。
比如我們按照部門分組後,想查看每個部門中都有誰,SQL語句可以寫成這樣:
SELECT department, Count(*), GROUP_CONCAT(name)
FROM employee
GROUP BY department;
結果如下: