Oracle中ROW_NUMBER() OVER()

Oracle中ROW_NUMBER() OVER()是窗口函数,用于为查询结果集中的每一行分配唯一序号,支持分组排序和全局排序。

1、基本语法

ROW_NUMBER() OVER(PARTITION BY 分组列 ORDER BY 排序列 ASC\|DESC)

PARTITION BY:按指定列分组,未指定则对整个结果集排序。

ORDER BY:定义排序规则(升序或降序)。

2、典型应用场景

‌(1)分页查询‌

获取薪资排名第四到第六的员工:

SELECT * FROM (

SELECT employee_id, salary,

ROW_NUMBER() OVER(ORDER BY salary DESC) AS rn

FROM employees

) WHERE rn BETWEEN 4 AND 6;

‌(2)数据去重‌

获取每个部门薪资最高的员工:

SELECT * FROM (

SELECT department_id, employee_name, salary,

ROW_NUMBER() OVER(PARTITION BY department_id

ORDER BY salary DESC) AS rn

FROM employees

) WHERE rn = 1;

(3) ‌分组排名‌

统计每个部门员工薪资排名:

SELECT department_id, employee_name, salary,

ROW_NUMBER() OVER(PARTITION BY department_id

ORDER BY salary DESC) AS rank

FROM employees;

3、与ROWNUM的区别

ROW_NUMBER():支持分组排序,为每行分配唯一序号。

ROWNUM:伪列,仅用于限制返回行数,无法指定排序规则。 ‌

相关推荐
梦想不只是梦与想3 分钟前
MySQL 数据库(二):数据类型
数据库·mysql·数据类型
野生技术架构师17 分钟前
Redis 和 MySQL 如何保证数据一致性?先更新数据库还是先删缓存,延迟双删、MQ、Canal 一次讲透
数据库·redis·缓存
Devin~Y23 分钟前
从内容社区到AI智能客服:Spring Boot + Spring Cloud + Spring AI 全栈实战面试拆解
java·spring boot·redis·elasticsearch·spring cloud·kafka·mybatis
未秃头的程序猿24 分钟前
从写CRUD到做AI Agent:我花了6个月转型,这是我的完整路线图
java·后端·ai编程
Java内核笔记24 分钟前
万字长文剖析 Spring Boot 4.1.0 启动流程源码:从 main 到就绪
java·后端
鸽芷咕28 分钟前
SQL Server数据迁移到金仓数据库复盘:从怕性能翻车,到TPS提升60%
数据库
2602_9599609230 分钟前
电商大厂Java面试:从Spring Boot、JPA、微服务到Redis、Kafka、Spring Security与监控,谢飞机的爆笑三轮问答
java·jvm·spring boot·redis·面试题
码农进化录34 分钟前
Java 程序员的 AI 进化论 | Spring Boot 搭企业智能客服,从设计到上线
java·spring boot·openai
旺仔学长 哈哈36 分钟前
别只做车辆 CRUD:Spring Boot 共享汽车管理系统从预约到还车的完整实现---源码53766
java·spring boot·在线预约·共享汽车
weixin_BYSJ198739 分钟前
springboot技能与工具共享小程序---附源码29657
java·javascript·spring boot·python·小程序·django·php