撩課-Mysql第6部分組查詢
學習地址:
撩課-JavaWeb系列1之基礎語法-前端基礎
撩課-JavaWeb系列2之XML
撩課-JavaWeb系列3之MySQL
撩課-JavaWeb系列4之JDBC
撩課-JavaWeb系列5之web伺服器-idea
下載地址:
https://pan.baidu.com/s/1qilY0kIpgnxuLELxjNIQxw 提取碼:4s9t
分組查詢
什麼是分組查詢
將查詢結果按照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;
書寫順序
執行順序