一、分組(統計)
查詢
1、語法 :
select [distinct] *| 分組欄位1[別名] [,分組欄位2[別名],...] | 統計函式
from 表名 [別名]
[where 條件(s)]
[group by 分組欄位1[,分組欄位2]]
[having 分組後的過濾條件(可以使用統計函式)]
[order by 排序欄位 asc|desc[,排序欄位 asc|desc]];
2、注意分組的細節:
❀ 分組查詢:select 後的欄位必須是分組欄位
(跟在group by 後面的欄位) 或 統計函式欄位
#錯誤使用分組(統計)查詢【查詢的欄位不是分組欄位】
select empno, count(empno) from emp;
❀ 不能在where 子句中限制組,即不能在where子句中使用組函式(統計函式)
。
#錯誤使用分組(統計)查詢【組函式出現在where的子句中】
select avg(sal) from emp where avg(sal) > 2000 group by deptno;
❀ 對分組的結果進行限制(過濾)---使用having
對組
進行篩選
#查詢各個部門的平均工資
select deptno, avg(sal) from emp group by deptno;
#查詢平均工資高於2000的部門和其平均工資 ('平均工資高於2000'是分組之後的篩選條件)
select avg(sal) from emp group by deptno having avg(sal) > 2000;
❀ 並列分組:
-
單列分組:水果分為蘋果、香蕉、葡萄。一共分為3個組。
-
什麼是並列分組:水果分為蘋果、香蕉、葡萄;然後蘋果又可以分為紅富士、醜蘋果;香蕉又分為芭蕉、小米蕉;葡萄又分為紅提、青提。一共分成6個組。
#檢視各個部門和崗位的平均工資
select deptno, job, avg(sal) from emp group by deptno, job;
■ sql語句的執行順序:從哪張表過濾掉不合法資料,然後分組(對分組結果再過濾一下)顯示出來,進行排序、分頁。
from where group by having select order by limit
■ where 和 having 執行的先後:
① where 是在分組之前
進行篩選,先過濾掉不合法資料, 在 where 之中不能使用統計函式(組函式)。
② having 是在分組之後
進行篩選,對組的結果進行過濾。