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计算平均数、众数、中位数(可以参考我之前的视频)

相关推荐
下地种菜小叶几秒前
定时任务系统怎么设计?一次讲清任务注册、分布式调度、幂等执行与失败补偿
java·开发语言·数据库·oracle·rabbitmq
z4424753261 分钟前
CSS如何实现响应式布局_使用Flexbox与Grid提升适配效率
jvm·数据库·python
Absurd5879 分钟前
优化文本分类中堆叠模型的网格搜索性能:避免训练卡顿的实用指南
jvm·数据库·python
2301_815279529 分钟前
怎样通过Navicat高效导出ER模型为PDF文档_大幅提升绘制效率
jvm·数据库·python
2401_8716965210 分钟前
CSS如何让带Flex属性的元素自身不脱离文本流控制
jvm·数据库·python
brucelee18612 分钟前
[特殊字符] PostgreSQL 数据库压力测试完整流程(JMeter版)
数据库·postgresql·压力测试
2301_8135995516 分钟前
SQL如何提取两个表的交集_INTERSECT与INNER JOIN结合
jvm·数据库·python
m0_6742946427 分钟前
mysql如何处理索引基数过低情况_mysql索引选择性分析
jvm·数据库·python
qq_3422958242 分钟前
c++怎么获取文件的压缩比例信息_Windows压缩卷特性【详解】
jvm·数据库·python
weixin_4585801244 分钟前
CSS如何控制列表间距_使用padding-left与盒模型
jvm·数据库·python