Oracle 多行函數(聚合函數)和分組統計

一、聚合函數

多行函數 (聚合函數):作用於多行,返回一個值。

--這裏的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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章