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() --偏移开窗

尚未学习

相关推荐
阿波罗尼亚20 小时前
数据库序列(Sequence)
数据库
Junsir大斗师20 小时前
Nginx服务器代理Postgresql-16后端数据库
数据库·nginx
Je1lyfish20 小时前
CMU15-445 (2025 Fall/2026 Spring) Project#3 - QueryExecution
linux·c语言·开发语言·数据结构·数据库·c++·算法
m0_596749091 天前
如何防止SQL拼接漏洞_使用PDO对象实现安全的SQL交互
jvm·数据库·python
老纪的技术唠嗑局1 天前
深度解析 LLM Wiki / Obsidian-Wiki / GBrain:Agent 时代知识的“自组织”与“自进化”
大数据·数据库·人工智能·算法
2301_795099741 天前
golang如何在Gin中自定义验证器_golang Gin自定义验证器实现方法
jvm·数据库·python
2301_766283441 天前
如何在MongoDB GridFS中进行按文件大小(length)范围的查询
jvm·数据库·python
冬天vs不冷1 天前
面试必知必会(14):MySQL执行计划与SQL优化
sql·mysql·面试
萧曵 丶1 天前
MySQL 高频面试题(由浅到深 完整版,面试必背)
数据库·mysql·面试
czlczl200209251 天前
MySQL 执行引擎:排序与临时表机制深度解析
数据库·mysql