ORACLE SQL 聚合(多行)聚合函式
阿新 • • 發佈:2019-02-16
oracle sql 提供了非常多的函式用於基礎查詢。這些函式主要分為兩大類:單行函數和聚合函式(多行函式)。
聚合函式通常應用在整表或分組統計查詢中。常用的聚合函式有:sum,count,min,max,avg,median。以scott使用者中的emp、dept表為例。
sum函式主要用於統計整表或分組境況下的某數值(number)列的數值之和(限定引數為number型),忽略NULL值。SQL> select * from dept; DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-12月-80 900 20 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 7876 ADAMS CLERK 7788 23-5月 -87 1100 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7900 JAMES CLERK 7698 03-12月-81 950 30 7902 FORD ANALYST 7566 03-12月-81 3000 20 7934 MILLER CLERK 7782 23-1月 -82 1300 10 已選擇14行。
SQL> --統計emp表所有員工的工資(sal)之和
SQL> select sum(sal) from emp;
SUM(SAL)
----------
29125
count函式主用用於統計整表或者分組記錄的個數。需要注意的是當count指定對某列進行統計時,會忽略該列值為NULL的記錄(行),count(*)與count(1)的計算結果一致,區別是在大資料量情況下的效率有所不同。SQL> --統計不同部門(deptno)的員工工資(sal)之和 SQL> select deptno,sum(sal) from emp group by deptno; DEPTNO SUM(SAL) ---------- ---------- 30 9400 20 10975 10 8750
SQL> --統計emp表中記錄的個數 SQL> select count(*) from emp; COUNT(*) ---------- 14 SQL> select count(*) from emp group by deptno; COUNT(*) ---------- 6 5 3 SQL> select deptno,count(*) from emp group by deptno; DEPTNO COUNT(*) ---------- ---------- 30 6 20 5 10 3
min,max 主要用於統計整表或者分組情況下某列的最小最大值,在計算時會忽略NULL值(不限定數值列,date、varchar型別的列都可以統計)。
SQL> select min(hiredate) from emp;
MIN(HIREDATE)
--------------
17-12月-80
SQL> select min(ename) from emp;
MIN(ENAME)
----------
ADAMS
SQL> select max(ename) from emp;
MAX(ENAME)
----------
WARD
SQL> select deptno,min(sal) min_sal,max(sal) max_sal from emp group by deptno;
DEPTNO MIN_SAL MAX_SAL
---------- ---------- ----------
30 950 2850
20 900 3000
10 1300 5000
avg函式主要用於統計整表或者分組情況下的平均值(限定輸入型別為number型),忽略NULL值。
SQL> select avg(sal) from emp;
AVG(SAL)
----------
2080.35714
SQL> select deptno,avg(sal) from emp group by deptno;
DEPTNO AVG(SAL)
---------- ----------
30 1566.66667
20 2195
10 2916.66667
median函式主要用於統計整表或者分組情況下的中位數(限定引數為數值型或日期/時間型),忽略NULL值。
SQL> select deptno,median(sal) from emp group by deptno;
DEPTNO MEDIAN(SAL)
---------- -----------
10 2450
20 2975
30 1375
SQL> select median(sal) from emp;
MEDIAN(SAL)
-----------
1550
SQL> select median(hiredate) from emp;
MEDIAN(HIREDAT
--------------
18-9月 -81