mysql加強(3)~分組(統計)查詢

一樂樂 發表於 2022-01-27
MySQL 統計

一、分組(統計) 查詢

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;
mysql加強(3)~分組(統計)查詢



■ sql語句的執行順序:從哪張表過濾掉不合法資料,然後分組(對分組結果再過濾一下)顯示出來,進行排序、分頁。

from where group by having select order by limit


■ where 和 having 執行的先後:

① where 是在分組之前進行篩選,先過濾掉不合法資料, 在 where 之中不能使用統計函式(組函式)。

② having 是在分組之後進行篩選,對組的結果進行過濾。