1. 程式人生 > >My SQL Case_4: 分組查詢練習

My SQL Case_4: 分組查詢練習

分組查詢:

  • 對資料來源中的資料按照某種類別進行分類之後再操作
  • 定義分組查詢的關鍵字: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語句:

  1. select 欄位|表示式 from 表名
  2. where 條件
  3. group by 列名
  4. having 條件
  5. order by 列名
  6. limit 開始索引,長度