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开始的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 中对列中的序号进行编号

如何通过单击 EditText 中的按钮逐个添加数字?

SQL中几个常用的排序函数

BigQuery 重复的 rank() 数字

如何清除SQL中的自增列并插入一组从1开始的新数字? [复制]

如何清除SQL中的自增列并插入一组从1开始的新数字? [复制]