oracle數據庫SQL開發之分組函數
一、分組函數(最多兩層)
– 分組函數是對錶中一組記錄進行操作,每組只返回一個結果,即首先要對錶記錄進行分組,然後再進行操作彙總,每組返回一個結果,分組時可能是整個表分爲一組,也可能根據條件分成多組。
– 分組函數常用到以下五個函數:
1.– MIN和MAX函數主要是返回每組的最小值和最大值。
• MIN
• MAX
–查詢入職日期最早和最晚的
SQL> SELECT MIN(hiredate), MAX(hiredate)
FROM emp;
2.-SUM和AVG函數分別返回每組的總和及平均值。
• SUM
• AVG 自動忽略null所在行 所以 select avg(nvl(comm,0)) from emp;
–查詢職位以SALES開頭的所有員工平均工資、最低工資、最高工資、工資和
SQL> SELECT AVG(sal), MAX(sal),
MIN(sal), SUM(sal)
FROM emp
WHERE job LIKE 'SALES%';
3.COUNT函數的主要功能是返回滿足條件的每組記錄條數。 使用佔位符能提高搜索效率。
二、group by子句
GROUP BY 所指定的列並不是必須出現在select 列表中 如果在select子句查詢中使用了組函數,任何不在組函數中的列或表達式都必須包含在group by子句中
–查詢每個部門每個崗位的工資總和。
SQL> SELECT deptno, job, sum(sal)
FROM emp
GROUP BY deptno, job;
三、having 子句 (放在group by後面)
• 不能在 where子句中限制組
• 可以通過 having 子句限制組
1.使用 having子句限制組
– 記錄已經分組.(所以放在group by子句之後)
– 使用過組函數.
– 與 having 子句匹配的結果才輸出
-查詢每個部門最高工資大於2900的部門編號,最高工資
SQL> SELECT deptno, max(sal)
FROM emp
GROUP BY deptno
HAVING max(sal)>2900;
四、SQL語句執行過程
• SELECT語句執行過程:
– 1.通過from子句中找到需要查詢的表;
– 2.通過where子句進行非分組函數篩選判斷;
– 3.通過group by子句完成分組操作;
– 4.通過having子句完成組函數篩選判斷;
– 5.通過select子句選擇顯示的列或表達式及組函數;
– 6.通過order by子句進行排序操作。