SqlServer窗口函数

SqlServer窗口函数

Rank() over(partition by 分组栏位名 order by 排序栏位名 desc)

Rank() over 用于指定条件后的进行排名.特点是对指定栏位的排名可以使用本函数,因为,如果出现两个相同的值,它会将其分为一组,同时将下一个栏位所占名次空出来

例:

SELECT
name,
subject,
score,
rank ( ) OVER ( partition BY subject ORDER BY score DESC ) rank
FROM
student_score;

img

注意:RANK() OVER() NULL值是最大

**可以通过:**rank() over(partition by course order by score desc nulls last)来规避NULL值

dense_rank() over(partition by 分组栏位名 order by 排序栏位名 desc)

dense_rank() over 与 rank() over的区别:前者并不会空出所占栏位数(也就是两个数值同用一个栏位数,那么下一个不同数值将占用前一个数值的栏位数),后者继续依照栏位数往下依次排列(栏位虽然并列,但是并列后的栏位会空出)

例:

SELECT
name,
subject,
score,
dense_rank ( ) OVER ( partition BY subject ORDER BY score DESC ) rankfrom student_score;

img

row_number() over(partition by 分组栏位名 order by 排序栏位名 desc)

row_number() over这个函数不需要考虑是否并列,哪怕根据条件查询出来的数值相同也会进行连续排列

SELECT
name,
subject,
score,
row_number ( ) OVER ( partition BY subject ORDER BY score DESC ) rankfrom student_score;

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值