My SQL Case_4: 分組查詢練習
阿新 • • 發佈:2018-11-22
分組查詢:
- 對資料來源中的資料按照某種類別進行分類之後再操作
- 定義分組查詢的關鍵字:group by 列名
- 分組一般是跟聚合函式一起配合使用
- having 用於對分組後的結果進行過濾
資料來源(emp表):
以下sql會查詢到每一組中的第一個工資
# 以下sql會查詢到每一組中的第一個工資
select sal from emp group by deptno;
獲取emp表中的每一組員工的平均工資
# 獲取emp表中的每一組員工的平均工資
select avg(sal) as avgsal from emp group by deptno;
獲取emp表中的每一組員工的平均工資且顯示部門編號
注意:
分組以後,select的查詢欄位只能是分組欄位或者跟分組欄位相關的欄位
# 獲取emp表中的每一組員工的平均工資且顯示部門編號
# 分組以後,select的查詢欄位只能是分組欄位或者跟分組欄位相關的欄位
select deptno,avg(sal) as avgsal from emp group by deptno;
獲取emp表中的每一組員工的平均工資及每一組部門編號,按照平均工資降序排列
# 獲取emp表中的每一組員工的平均工資及每一組部門編號,按照平均工資降序排列
select deptno,avg(sal) as avgsal from emp group by deptno order by avgsal desc;
獲取部門編號大於等於20的每個部門員工的平均工資及部門編號
注意:
是先過濾還是先求平均值
# 獲取部門編號大於等於20的每個部門員工的平均工資及部門編號
# 方法1 思路:先過濾出>=20的部門,然後在分組進求平均值
select deptno, avg(sal) from emp where deptno >= 20 group by deptno;
# 方法2 思路:先把每個部門的平均工資求出來,然後過濾>=20部門
select deptno, avg(sal) as asal from emp group by deptno having deptno>=20;
獲取部門編號大於等於20的部門的平均工資中的最小的平均工資及部門編號
# 獲取部門編號大於等於20的部門的平均工資中的最小的平均工資及部門編號
select deptno, avg(sal) as asal from emp where deptno >= 20 group by deptno order by asal asc limit 1;
總結:
一個完整的select語句:
- select 欄位|表示式 from 表名
- where 條件
- group by 列名
- having 條件
- order by 列名
- limit 開始索引,長度