千家信息网

分析函数

发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,--row_numberSELECT ename,deptno,rownum,row_number() over(ORDER BY deptno) rn,rank() over(ORDER BY de
千家信息网最后更新 2024年11月30日分析函数

--row_number

SELECT ename,

deptno,

rownum,

row_number() over(ORDER BY deptno) rn,

rank() over(ORDER BY deptno) rk, --跳号

dense_rank() over(ORDER BY deptno) dense_rk --不跳号

FROM emp-- over 必须跟order by

--row_number

SELECT ename,

deptno,

rownum,

row_number() over(partition by deptno ORDER BY deptno) rn,

rank() over(partition by deptno ORDER BY deptno) rk,

dense_rank() over(partition by deptno ORDER BY deptno) dense_rk

FROM emp



--row_number

SELECT ename,

deptno,

rownum,

row_number() over(partition by deptno ORDER BY sal) rn,

rank() over(partition by deptno ORDER BY sal) rk,

dense_rank() over(partition by deptno ORDER BY sal) dense_rk

FROM emp

--求每个部门的最高工资

SELECT *

FROM (SELECT ename,

deptno,

rownum,

row_number() over(PARTITION BY deptno ORDER BY sal DESC) rn

--rank() over(partition by deptno ORDER BY sal) rk,

--dense_rank() over(partition by deptno ORDER BY sal) dense_rk

FROM emp)

WHERE rn = 1

--sum,avg,max,min

SELECT ename,

deptno,

sal,

SUM(sal) over(PARTITION BY deptno) AS "部门汇总", SUM(sal) over() AS "全部汇总"

FROM emp;


--累加

SELECT ename,

deptno,

sal,

SUM(sal) over(order BY sal), SUM(sal) over(order BY sal,rowid)

FROM emp;



SELECT ename,

deptno,

sal,

avg(sal) over(PARTITION BY deptno) AS "部门汇总", avg(sal) over() AS "全部汇总"

FROM emp;

SELECT empno,

ename,

sal

FROM emp a

WHERE sal = (SELECT MIN(sal) FROM emp b WHERE a.deptno = b.deptno)

--改写

SELECT *

FROM (

SELECT a.*,

row_number() over(PARTITION BY a.deptno ORDER BY a.sal) rn

FROM emp a)

WHERE rn = 1


SELECT *

FROM emp

WHERE sal in(SELECT MIN(sal) over(PARTITION BY deptno ORDER BY sal) FROM emp a);


0