SQL根据多个列创建密集排名

时间:2018-10-18 14:09:14

标签: sql teradata rank dense-rank

我有一个包含两个字段的数据集,需要在其中为其创建密集排名。如果Field_1不为null,则Field_2为null,反之亦然。

Field_1 Field_2
a   
        1
        2
        3
        4
b   
        7
        8
        9
c   
        15
        20
        25

我正在尝试做到这一点

Field_1 Field_2 Field_3
a               1
        1       1
        2       1
        3       1
        4       1
b               2
        7       2
        8       2
        9       2
c               3
        15      3
        20      3
        25      3

我可以在以下行中订购数据:

row_number() over (partition by null order by Field_2,Field_1) as Field_3

但这不会给我我所寻找的密集排名。

1 个答案:

答案 0 :(得分:0)

假设您确实有某种增量行号列(我们将其称为row_number),则可以使用windowing子句来计算填充的field_1值的数目:

COUNT(field_1) OVER (ORDER BY row_number ROWS UNBOUNDED PRECEDING) AS group_number

这使它成为每行计算field_1排序后在其 之前(包括其自身)的已填充row_number值的数量的方法。

有关此技术的更多详细信息:https://stackoverflow.com/a/30862368/477563