SQL四大排名函数

0、数据

result表:
在这里插入图片描述


一、ROW_NUMBER (连续排名)

特点:对于同值元组,排名序号不同。所有相同的元组各自为组。

select *, ROW_NUMBER() OVER (order by score desc) 'Rank'
from result;

结果
在这里插入图片描述

二、RANK (并列跳跃排名)

特点:对于同值元组,排名序号相同。但所有相同的元组各自为组,即对别的元组来说影响都是多元的。

select *, RANK() OVER (order by score desc) 'Rank'
from result;

结果

在这里插入图片描述

RANK代码实现:

select score, (
   select count(score) + 1 
   from result s2 
   where s2.score > s.score
) 'Rank'
from result s 
order by score desc;

三、DENSE_RANK (并列连续排名)

特点:对于同值元组,排名序号相同。且所有相同的元组算作一组,即对别的元组来说影响都是一元的。

select *, DENSE_RANK() OVER (order by score desc) 'Rank'
from result;

结果
在这里插入图片描述

DENSE_RANK代码实现:

select score, (
	select count(distinct score)
	from result s2
	where s2.score >= s.score
) 'Rank'
from result s
order by score desc;

四、NTILE() (分组排名)

特点:按指定列将所有记录分成指定个数的组,每一组序号相同,但组内元组指定的列可能不同。
相当于按指定列先排序,再按长度截断分组。

select *, NTILE(4) OVER (order by score desc) 'Rank'
from result;

结果
在这里插入图片描述

五、PARTITION BY(组内排序)

(1) 按照course_id分组,并在组内进行RANK排序

select *, RANK() OVER (partition by course_id order by score desc) 'Rank'
from result;

结果:
在这里插入图片描述

(2) 按照student_id分组,并在组内进行DENSE_RANK排序

select *, DENSE_RANK() OVER (partition by student_id order by score desc) 'Rank'
from result;

结果:

在这里插入图片描述

(3) 利用排序代码实现 按照course_id分组,并在组内进行对分数进行DENSE_RANK排序

-- 分组 DENSE_RANK
select *, (
	select count(distinct score)
	from result s2
	where s2.course_id = s.course_id and s2.score >= s.score
) 'Rank'
from result s
order by s.course_id, s.score desc;

在这里插入图片描述

(4) 利用排序代码实现 按照student_id分组,并在组内进行对分数进行RANK排序:

select *, (
	select count(score) + 1
	from result s2
	where s2.student_id = s.student_id and s2.score > s.score
) 'Rank'
from result s
order by s.student_id, s.score desc;

在这里插入图片描述

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃奶糖_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值