Oracle DB組函數
; 組函數
– 類型和語法
– 使用AVGSUMMINMAXCOUNT
– 在組函數中使用DISTINCT關鍵字
– 組函數中的NULL值
何謂組函數
組函數會對行集進行計算為每個組提供一個結果
與單行函數不同組函數用於對行集進行計算從而為每個組提供一個結果這些集合可以包含整個表也可以包含表分割成的組
組函數的類型
; AVG
; COUNT
; MAX
; MIN
; STDDEV
; SUM
; VARIANCE
每個函數都接受一個參數下表列出了在語法中可使用的選項
組函數語法
SELECT group_function(column)
FROM table
[WHERE condition]
[ORDER BY column];
組函數語法
組函數應放在SELECT關鍵字之後可以使用逗號分隔多個組函數
使用組函數的准則
; DISTINCT使函數僅考慮非重復值;ALL使函數考慮每個值(包括重復值)默認值為ALL因此無需指定
; 使用expr參數的函數的數據類型可以是CHARVARCHARNUMBER或DATE
; 所有組函數都忽略空值要用一個值替代空值使用NVLNVLCOALESCECASE或DECODE函數
使用AVG和SUM函數
可以對數字數據使用AVG和SUM函數
hr@TEST> SELECT AVG(salary) MAX(salary)MIN(salary) SUM(salary) FROM employees WHERE job_id LIKE %REP%;
AVG(SALARY) MAX(SALARY) MIN(SALARY) SUM(SALARY)
可以對能夠存儲數字數據的列使用AVGSUMMIN和MAX函數示例顯示所有銷售代表的月薪平均值最高值最低值與總和
使用MIN和MAX函數
可以對數字字符和日期數據類型使用MIN和MAX函數
hr@TEST> SELECT MIN(hire_date) MAX(hire_date) FROM employees;
MIN(HIRE_DATE) MAX(HIRE_DATE)
JAN APR
可以對數字字符和日期數據類型使用MAX和MIN函數示例顯示任職時間最短和最長的雇員
下面的示例顯示在包含所有雇員的列表中按字母順序排列姓氏時位於首位及位於末位的雇員姓氏
hr@TEST> SELECT MIN(last_name) MAX(last_name) FROM employees;
MIN(LAST_NAME) MAX(LAST_NAME)
Abel Zlotkey
注AVGSUMVARIANCE和STDDEV函數僅可用於處理數字數據類型MAX和MIN函數不能用於處理LOB或LONG數據類型
使用COUNT函數
COUNT(*)將返回表中的行數
hr@TEST> SELECT COUNT(*) FROM employees WHERE department_id = ;
COUNT(*)
示例顯示部門 中雇員的數量
COUNT(expr)將返回expr為非空值的行的數量
hr@TEST> SELECT COUNT(commission_pct) FROM employees WHERE department_id = ;
COUNT(COMMISSION_PCT)
示例顯示部門 中可以獲得傭金的雇員的數量
COUNT函數有以下三種格式
; COUNT(*)
; COUNT(expr)
; COUNT(DISTINCT expr)
COUNT(*)用於返回表中符合SELECT語句標准的行數包括重復行和在任何列中含有空值的行如果SELECT語句中包含WHERE子句則COUNT(*)會返回符合WHERE子句中條件的行數相反COUNT(expr)返回由expr標識的列中非空值的數量COUNT(DISTINCT expr)返回由expr標識的列中不同非空值的數量
使用DISTINCT關鍵字
; COUNT(DISTINCT expr)將返回expr的不同非空值的數量
; 要顯示EMPLOYEES表中不同部門值的數量可使用
hr@TEST> SELECT COUNT(DISTINCT department_id) FROM employees;
COUNT(DISTINCTDEPARTMENT_ID)
使用DISTINCT關鍵字可以避免對某一列中的任何重復值進行計數
示例顯示EMPLOYEES表中不同部門值的數量
組函數和空值
組函數將忽略列中的空值
hr@TEST> SELECT AVG(commission_pct) FROM employees;
AVG(COMMISSION_PCT)
僅根據在表的COMMISSION_PCT列中存儲了有效值的行計算平均值平均值的計算方法是用付給所有雇員的傭金總和除以獲得傭金的雇員數()
NVL函數會強制組函數包括空值
hr@TEST> SELECT AVG(NVL(commission_pct )) FROM employees;
AVG(NVL(COMMISSION_PCT))
根據表中的所有行計算平均值不考慮COMMISSION_PCT列中是否存儲空值平均值的計算方法是用付給所有雇員的傭金總和除以公司中的雇員總數()
所有組函數都忽略列中的空值但是NVL函數會強制組函數包括空值
From:http://tw.wingwit.com/Article/program/Oracle/201311/18770.html