SQL 窗口函数

1.窗口函数之排序函数

RANK, DENSE_RANK, ROW_NUMBER

  1. RANK函数

    计算排序时,如果存在相同位次的记录,则会跳过之后的位次

    有 3 条记录排在第 1 位时: 1 位、1 位、1 位、4 位...

  2. DENSE_RANK函数

    同样是计算排序,即使存在相同位次的记录,也不会跳过之后的位次

    有 3 条记录排在第 1 位时: 1 位、1 位、1 位、2 位

  3. ROW_NUMBER函数

    赋予唯一的连续位次。

    例)有 3 条记录排在第 1 位时: 1 位、2 位、3 位、4 位

语法
<窗口函数> OVER ([PARTITION BY <列清单>] ORDER BY <排序用列清单>)

根据分数对学生从高到低排名,不对科目进行分组,成绩相同则排名相同并且位次连续
sql 复制代码
SELECT student_name, score, DENSE_RANK() OVER(ORDER BY score DESC) AS 'rank' FROM grade;
根据分数对同科目的学生从高到低排名,成绩相同,排名不相同
sql 复制代码
SELECT student_name, score, ROW_NUMBER() OVER(PARTITION BY course_name ORDER BY score DESC) AS 'rank' FROM grade;
窗口函数使用场景

1.直接排序:按照某列对数据进行排序

2.Top-k:查询排名TOP-k的数据

3.最值问题:查询最大、最多的数据

4.辅助列:比如计算连续登陆问题、用SQL计算平均数、众数、中位数(可以参考我之前的视频)

相关推荐
sinat_383437363 小时前
HTML函数调试需要高性能电脑吗_调试环境硬件需求技巧【指南】
jvm·数据库·python
解救女汉子4 小时前
Nginx如何配置phpMyAdmin访问_反向代理设置方法
jvm·数据库·python
qq_206901394 小时前
Navicat导出CSV文件数据为空如何解决_过滤条件与权限排查
jvm·数据库·python
m0_588758484 小时前
高效实现分组内跨行时间戳匹配:为每组生成布尔标记列 user_rejects
jvm·数据库·python
qq_206901394 小时前
golang如何实现日志按级别过滤_golang日志按级别过滤实现教程.txt
jvm·数据库·python
weixin_458580124 小时前
怎么通过Node.js监控MongoDB的慢查询_监听数据库事件或利用APM工具集成
jvm·数据库·python
下地种菜小叶4 小时前
特征定义、特征计算、特征服务怎么配合?一次讲透
java·服务器·前端·数据库·spring cloud
weixin_424999364 小时前
php怎么实现API网关聚合_php如何将多个微服务接口合并响应
jvm·数据库·python
2401_835956814 小时前
SQL在JOIN场景下如何进行索引维护_覆盖索引构建与失效处理
jvm·数据库·python
abc123456sdggfd4 小时前
c++如何读取并展示ZIP压缩包内的目录结构树_minizip集成【附源码】
jvm·数据库·python