SQL排名问题

题目描述

https://leetcode-cn.com/problems/rank-scores/

使用基本语句

可以保证分数的排名是连续而非跳跃的

select s1.Score,count(distinct (s2.Score))as Rank
from Scores s1,Scores s2
where s1.Score<=s2.Score
group by s1.ID
order by Rank;

涉及到排名问题,使用窗口函数

https://blog.youkuaiyun.com/qq_41805514/article/details/81772182
一篇很赞的博客
区分常用的窗口函数

row_number()
rank()
dense_rank()

在这里插入图片描述

select *,
   rank() over (order by 成绩 desc) as ranking,
   dense_rank() over (order by 成绩 desc) as dese_rank,
   row_number() over (order by 成绩 desc) as row_num
from 班级;

结果如下
在这里插入图片描述

### SQL 中的排名函数及其用法 在 SQL Server 中,内置的排名函数可以与 `ORDER BY` 子句一起使用来提供一组行中的排名。可用的排名函数有四种:`RANK()`、`DENSE_RANK()`、`ROW_NUMBER()` 和 `NTILE()`[^1]。 #### RANK() 函数 `RANK()` 函数会根据指定列的值分配等级给每一行数据。如果存在并列,则下一个编号将是当前编号加上的并列数量再加一。 ```sql SELECT column_name, RANK() OVER (ORDER BY some_column DESC) AS 'Rank' FROM table_name; ``` #### DENSE_RANK() 函数 `DENSE_RANK()` 类似于 `RANK()`,但是它不会跳过重复项后的序列号;也就是说,在遇到相同分数时,后续记录仍然紧接前一条记录之后继续计数。 ```sql SELECT column_name, DENSE_RANK() OVER (ORDER BY some_column DESC) AS 'Dense_Rank' FROM table_name; ``` #### ROW_NUMBER() 函数 对于每组分区内的行,`ROW_NUMBER()` 将返回唯一的连续整数值作为该行的位置序号。即使在同一分区内也不存在相同的 row_number 值。 ```sql SELECT column_name, ROW_NUMBER() OVER (PARTITION BY partition_column ORDER BY order_column) AS 'Row_Num' FROM table_name; ``` #### NTILE() 函数 `NTILE(n)` 把查询的结果集分成 n 个桶或者区间,并为每个桶赋予相应的编号。这有助于将大量数据均匀分布到多个类别中以便分析。 ```sql SELECT column_name, NTILE(4) OVER (ORDER BY some_column) AS Quartile -- 这里我们将结果分为四部分 FROM table_name; ``` 这些功能强大的窗口函数不仅能够帮助分析师更好地理解数据模式,还可以简化复杂的数据处理逻辑[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值