一、聚合函數
多行函數 (聚合函數):作用於多行,返回一個值。
--這裏的1表示主鍵那一列
select count(1) from emp;---查詢總數量
select sum(sal) from emp;---工資總和
select max(sal) from emp;---最大工資
select min(sal) from emp;---最低工資
select avg(sal) from emp;---平均工資
二、分組統計
分組統計需要使用 GROUP BY 來分組
語法:
SELECT * |列名 FROM 表名 {WEHRE 查詢條件} {GROUP BY 分組字段} ORDER BY 列名 1 ASC|DESC,
列名 2...ASC|DESC
分組查詢中,出現在 group by 後面的原始列,才能出現在select後面
沒有出現在 group by 後面的列,想在 select 後面,必須加上聚合函數。
聚合函數有一個特性,可以把多行記錄變成一個值
- 查詢每個部門的人數
- 查詢出每個部門的平均工資
- 如果我們想查詢出來部門編號,和部門下的人數
- 按部門分組,查詢出部門名稱和部門的員工數量
- 查詢出部門人數大於 5 人的部門
分析:需要給 count(ename)加條件,此時在本查詢中不能使用 where,可以使用 HAVING
- 查詢出部門平均工資大於 2000 的部門
---查詢出平均工資高於2000的部門信息
select e.deptno, avg(e.sal) asal
from emp e
group by e.deptno
having avg(e.sal)>2000;
---所有條件都不能使用別名來判斷,因爲條件的優先級大於select,所以運行where時,別名還未成立
--比如下面的條件語句也不能使用別名當條件
select ename, sal s from emp where sal>1500;
---查詢出每個部門工資高於800的員工的平均工資
select e.deptno, avg(e.sal) asal
from emp e
where e.sal>800
group by e.deptno;
----where是過濾分組前的數據,having是過濾分組後的數據。
---表現形式:where必須在group by之前,having是在group by之後。
---查詢出每個部門工資高於800的員工的平均工資
---然後再查詢出平均工資高於2000的部門
select e.deptno, avg(e.sal) asal
from emp e
where e.sal>800
group by e.deptno
having avg(e.sal)>2000;