oracle sql 提供了非常多的函数用于基础查询。这些函数主要分为两大类:单行函数和聚合函数(多行函数)。
聚合函数通常应用在整表或分组统计查询中。常用的聚合函数有:sum,count,min,max,avg,median。以scott用户中的emp、dept表为例。
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行。
sum函数主要用于统计整表或分组境况下的某数值(number)列的数值之和(限定参数为number型),忽略NULL值。
SQL> --统计emp表所有员工的工资(sal)之和
SQL> select sum(sal) from emp;
SUM(SAL)
----------
29125SQL> --统计不同部门(deptno)的员工工资(sal)之和
SQL> select deptno,sum(sal) from emp group by deptno;
DEPTNO SUM(SAL)
---------- ----------
30 9400
20 10975
10 8750count函数主用用于统计整表或者分组记录的个数。需要注意的是当count指定对某列进行统计时,会忽略该列值为NULL的记录(行),count(*)与count(1)的计算结果一致,区别是在大数据量情况下的效率有所不同。
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
本文介绍了 Oracle SQL 中的聚合函数,包括 sum、count、min、max、avg 和 median 的使用方法,并通过 scott 用户下的 emp 和 dept 表进行实例演示。

335

被折叠的 条评论
为什么被折叠?



