撩課-Mysql第6部分組查詢
分組查詢
什麼是分組查詢
將查詢結果按照1個或多個欄位進行分組,欄位值相同的為一組
分組使用
SELECT gender from employee GROUP BY gender;
根據gender欄位來分組, gender欄位的全部值只有兩個('男'和'女'), 所以分為了兩組 當group by單獨使用時,只顯示出每組的第一條記錄 所以group by單獨使用時的實際意義不大

分組注意事項
在使用分組時, select後面直接跟的欄位 一般都出現在group by 後 group by + group_concat() group_concat(欄位名) 可以作為一個輸出欄位來使用 表示分組之後,根據分組結果, 使用group_concat()來放置 每一組的某欄位的值的集合
SELECT gender,GROUP_CONCAT(name) from employee GROUP BY gender;


group by + 聚合函式
通過group_concat()的啟發, 我們既然可以統計出每個分組的某欄位的值的集合, 那麼我們也可以通過集合函式 來對這個"值的集合"做一些操作
查詢每個部門的部門名稱和每個部門的工資和
SELECT department,SUM(salary) FROM employee GROUP BY department;
查詢每個部門的部門名稱以及每個部門的人數
SELECT department,COUNT(*) FROM employee GROUP BY department;
查詢每個部門的部門名稱以及每個部門工資大於1500的人數
SELECT department,COUNT(salary) FROM employee WHERE salary > 1500 GROUP BY department;

group by + having
用來分組查詢後指定一些條件來輸出查詢結果 having作用和where一樣,但having只能用於group by 查詢工資總和大於9000的部門名稱以及工資和
查詢每個部分的工資總和
SELECT department,GROUP_CONCAT(salary) FROM employee GROUP BY department;
SELECT department,SUM(salary) FROM employee GROUP BY department;
總和大於9000
SELECT department,SUM(salary) FROM employee GROUP BY department HAVING SUM(salary)>9000;

having與where的區別
having是在分組後對資料進行過濾. where是在分組前對資料進行過濾 having後面可以使用分組函式(統計函式) where後面不可以使用分組函式 WHERE是對分組前記錄的條件, 如果某行記錄沒有滿足WHERE子句的條件, 那麼這行記錄不會參加分組; 而HAVING是對分組後資料的約束。

查詢工資大於2000的
SELECT * FROM employee WHERE salary >2000;
各部門工資
SELECT department, GROUP_CONCAT(salary) FROM employee WHERE salary >2000 GROUP BY department;
各部門工資總和
SELECT department, SUM(salary) FROM employee WHERE salary >2000 GROUP BY department;
各部門工資總和大於6000
SELECT department, SUM(salary) FROM employee WHERE salary >2000 GROUP BY department HAVING SUM(salary)>6000;
各部門工資總和大於6000降序排列
SELECT department, SUM(salary) FROM employee WHERE salary >2000 GROUP BY department HAVING SUM(salary)>6000 ORDER BY SUM(salary) DESC;

書寫順序

執行順序
