mysql篇第十課:查詢語句(四)
這節課繼續學查詢
分組查詢
語法: select 查詢的欄位,分組函式 from 表 group by 分組的欄位
注意:
1、可以按單個欄位分組
2、和分組函式一同查詢的欄位最好是分組後的欄位
3、分組篩選
針對的表 位置 關鍵字
分組前篩選: 原始表 group by的前面 where
分組後篩選: 分組後的結果集 group by的後面 having
4、可以按多個欄位分組,欄位之間用逗號隔開
5、可以支援排序
6、having後可以支援別名
Demo 01:
-- 根據部門分組
select * from tbl_employee GROUP BY d_id;
非常奇怪,為什麼每組只有一條資料?
因為group by的機制就是每組只取一條資料
如果我希望所有資料都顯示怎麼辦?
Demo 02:
-- 根據部門分組
select * from tbl_employee GROUP BY d_id,id;
為什麼加上id之後就全部出來了呢?
因為根據id分組的話,id作為主鍵是不可重複的,所以所有資料都會顯示
因此,如果分組後想取得所有資料而不是每組取一條資料的話,分組條件要加上主鍵或者其他不可重複的列
下面說說where和having的區別
Where是在分組前 對所有資料進行條件篩選
Having 是在分組後 對所有資料以組為單位進行篩選
Demo 03:
-- 根據部門分組,獲取組內人數大於3的組內所有成員
select * from tbl_employee GROUP BY d_id, id having count(*) > 3;
為什麼會這樣呢?
因為我們是根據d_id和id分組,既然你根據id分組了那麼每個組其實只有一行資料
那麼怎麼才能實現呢? 要用子查詢,這個以後講。
Demo 04:
-- 檢視每個部門的人數
select d_id as 部門, count(*) as 部門人數 from tbl_employee GROUP BY d_id;
Demo 05:
-- 檢視部門人數大於3的每個部門的人數
select d_id as 部門, count(*) as 部門人數 from tbl_employee GROUP BY d_id having count(*) > 3;