文章目录
开窗函数(分析函数)
写法
分析函数名() OVER(分析子句)
分析函数名
聚合类:
SUM AVG MIN MAX COUNT
排序类:
row_number()
RANK()
dense_rank()
分析子句
PARTITION BY 分组内容
ORDER BY 排序内容
ROWS 窗口(用的不多)
聚合类:
SUM AVG MIN MAX COUNT --聚合开窗
例题:查询员工的姓名岗位薪资以及该员工对应的部门平均薪资
SELECT ename,job,sal,AVG(sal) OVER(PARTITION BY deptno) a FROM emp;
练习:
查询员工工资比该员工所在岗位平均薪资高的员工信息
SELECT *
FROM (SELECT EMP.*, AVG(SAL) OVER(PARTITION BY JOB) A FROM EMP)
WHERE SAL > A;
注意:
1.聚合开窗的时候,分析函数名必须有内容,即AVG() 括号里必须要有东西
2.分析子句没有要求
排序类:
row_number()
RANK()
dense_rank() --排序开窗
区别
SELECT ENAME,
SAL,
DEPTNO,
ROW_NUMBER() OVER(PARTITION BY DEPTNO ORDER BY SAL),--不考虑并列 1234567
RANK() OVER(PARTITION BY DEPTNO ORDER BY SAL), --考虑并列 跳过并列1224567
DENSE_RANK() OVER(PARTITION BY DEPTNO ORDER BY SAL) --考虑并列,不跳过并列 1223456
FROM emp;
练习:查询每个部门工资的前两名
SELECT *
FROM (SELECT ENAME,
RANK() OVER(PARTITION BY DEPTNO ORDER BY SAL) A,
DEPTNO
FROM EMP)
WHERE A <= 2
注意:
1.分析函数名内是不需要有东西的
2.分析子句里必须有 order BY
偏移类
LAG() LEAD() --偏移开窗
尚未学习