SQL中的RANK,但当数字大于时再次从1开始
Posted
技术标签:
【中文标题】SQL中的RANK,但当数字大于时再次从1开始【英文标题】:RANK in SQL but start at 1 again when number is greater than 【发布时间】:2020-12-23 00:03:03 【问题描述】:我需要下面的 sql 代码。我希望它排名,但是如果 DSLR >= 60,那么我希望排名重新开始,如下所示。
谢谢
【问题讨论】:
请用您正在运行的数据库标记您的问题:sqlserver、oracle、postgres...? 您打算如何保留DSLR
值的原始顺序?
【参考方案1】:
假设您有一个定义行顺序的列,例如id
,您可以将其作为间隙和孤岛问题来解决。孤岛是一组相邻的记录,以dslr
以上60
开头。我们可以用一个窗口总和来识别它们,然后在每个岛内排名:
select dslr, rank() over(partition by grp order by id) as rn
from (
select t.*,
sum(case when dslr >= 60 then 1 else 0 end) over(order by id) as grp
from mytable t
) t
【讨论】:
以上是关于SQL中的RANK,但当数字大于时再次从1开始的主要内容,如果未能解决你的问题,请参考以下文章