plsql查询结果窗口没了_SQL高级查询——窗口函数在业务中的应用

本文介绍了窗口函数在SQL查询中的应用,包括组内排名、求Top N问题、组内比较等场景。重点讲解了rank()、dense_rank()、row_number()的区别,以及如何使用它们解决实际业务问题。同时,文章还提到了SQL查询优化的几个要点,如避免使用*、避免函数在where子句左边、避免in和not in等。
摘要由CSDN通过智能技术生成

37ef66d4b3db92b179ac751afb04c02f.png

4e21ea395472fc2405c3d7b12aae0c55.png

一、窗口函数简介

窗口函数基本语法:

<窗口函数> OVER (PARTITION BY <用户分组的列名> ORDER BY <用户排序的列名>)

<窗口函数>可使用一下两种函数:

  • 专用窗口函数:rank,dense_rank,row_number。
  • 聚合函数:sum,avg,count,max,min。

窗口函数是对where或者group by 子句处理后的结果进行操作,所以窗口函数原则上只能写在select 子句中。

二、业务中常用的窗口函数

2.1、组内排名问题

2.1.1 专用窗口函数 rank()

17bd57db56900ebb2423ca4a8ea4f90f.png
班级表信息

现需对原始班级表进行操作,按班级顺序排列并查询成绩并按成绩排序从高到低。

SELECT 学号,班级,成绩,
rank() over(PARTITION BY 班级 ORDER BY 成绩 DESC) AS rank_
FROM 班级表;

3c135d4bb145c717a6e361dd1bc81d31.png
处理结果

2.1.2 专用窗口函数rank()、dense_rank()、row_number()的区别

SELECT 学号,班级,成绩,
rank() over(ORDER BY 成绩 DESC) AS rank_,
dense_rank() over(ORDER BY 成绩 DESC) AS dense,
row_number() over(ORDER BY 成绩 DESC) AS row_num
FROM 班级表;

e37e568aa7a28342767e7ef160d264e5.png
rank、dense_rank、row_number三者区别

rank和dense_rank对于相同结果会相同排名,相同结果排名结束后,dense_rank会接着连续的排名继续排名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值