Oracle 聚合函數


聚合函數
SQL中提供的聚合函數可以用來統計、求和、求最值等等。

此處采用Oracle 11g中其他用戶SCOTT中的EMP表,進行演示。

COUNT統計行數量

COUNT(*)統計的是結果集的總條數,而count(字段)統計的是該字段中不為null的總條數

1、查詢有多少崗位

1 selete count(distinct job) from emp;

2、查詢員工總數 入職時間 最高工資 工資總額 平均工資

1 selete count(empno),
2 to-char(min(hiredate),'yyyy-mm-dd')||'----'||to_char(max(hiredate),'yyyy-mm-dd') as 入職時間,
3 max(sal),sum(sal),avg(sal)
4 from emp; 

SUM:獲取單個列的合計值

3、查詢工資總額

1 selete sum(sal) from emp;

AVG:計算某個列的平均值
MAX:計算列的最大值
MIN:計算列的最小值

4、查詢最早入職時間

1 selete min(hiredate) from emp;

group by 分組函數 一般與聚合函數組合用

5、查詢每個崗位最高工資

1 selete job,max(sal) from emp group by job;

6、查詢崗位平均工資>2500

易錯:

1 select job,avg(sal)
2 from emp
3 group by job
4 where sal>2500

當改寫成:

1  select job,avg(sal)
2  from emp
3  where sal>2500
4  group by job

執行結果:

雖然能執行出結果,但是它是將所有大於2500的工資的崗位,集合在一起,算平均工資,不符合要求。

應該改成:

1 select job,avg(sal) 2 from emp 3 group by job 4 having round(avg(sal))>2500

執行結果:

wherehaving的區別

  • where僅僅用於處理從from子句中返回的值。
  • having子句通常是與order by子句一起使用的,因為having的作用是對使用group by進行分組統計后的結果再進行下一步的篩選。

7、查詢每個部門員工的平均工資 最高工資 工資總額 根據工資總額排序

1 selete deptno ,round(avg(sal)),max(sal),sum(sal)
2 from emp
3 group by deptno
4 order by sum(sal)

執行結果:

總結:SQL的執行順序:
         –第一步:執行FROM
         –第二步:WHERE條件過濾
         –第三步:GROUP BY分組
         –第四步:執行SELECT投影列
         –第五步:HAVING條件過濾
         –第六步:執行ORDER BY 排序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM