SQL开窗函数

开窗函数(分析函数)

写法

分析函数名() 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() --偏移开窗

尚未学习

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值