以EMP表中sal列为例
看下数据
SQL> select * from scott.emp ;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 1980/12/17 800.00 20
7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30
7566 JONES MANAGER 7839 1981/4/2 2975.00 20
7654 MARTIN SALESMAN 7698 1981/9/28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30
7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987/5/23 1100.00 20
7900 JAMES CLERK 7698 1981/12/3 950.00 30
7902 FORD ANALYST 7566 1981/12/3 3000.00 20
7934 MILLER CLERK 7782 1982/1/23 1300.00 10
14 rows selected
平均数
平均数
某列的平均值.
SQL> select avg(sal) from scott.emp ;
AVG(SAL)
----------
2073.21428
众数
出现次数最多的值
SQL> select distinct sal
2 from (select sal, count(*) cnt from scott.emp group by sal) t1,
3 (select max(count(*)) cnt from scott.emp group by sal) t2
4 where t1.cnt = t2. cnt ;
SAL
---------
1250.00
中位数
中位数是值数据排序后中间位置的值
中位数的计算分两种情况 : 数列长度为奇数,取中间一行 舒蕾长度为偶数,取中间两行的均值
数列长度为偶数,取中间两行均值
SQL> select avg(sal)
2 from (select sal, row_NUMBER() OVER(ORDER BY SAL) RN FROM SCOTT.EMP),
3 (select ceil(count(*) / 2) cnt1, ceil(count(*) / 2 + 0.5) cnt2
4 from scott. emp) where rn in(cnt1, cnt2) ;
AVG(SAL)
----------
1550
数列长度为奇数,取中间行的值
SQL> delete from scott.emp where sal= 5000 ;
1 row deleted
SQL>
SQL> select avg(sal)
2 from (select sal, row_NUMBER() OVER(ORDER BY SAL) RN FROM SCOTT.EMP),
3 (select ceil(count(*) / 2) cnt1, ceil(count(*) / 2 + 0.5) cnt2
4 from scott. emp) where rn in(cnt1, cnt2) ;
AVG(SAL)
----------
1500