Redshift:row_number函数按降序作用于数量,将值为0的值排在第1位

时间:2019-07-19 15:26:40

标签: sql amazon-redshift

我有一个数据集,可以记录各个学科的学生分数。我正在尝试使用redshift中的row_number()函数根据学生的总得分对他们进行排序。但是,该数据集的所有学科中只有少数学生的分数都为0。查询返回的学生排名为1,然后按照正确的顺序(降序)跟着学生。我如何确保得分为0的学生排在最后?

2 个答案:

答案 0 :(得分:1)

您可以在case中使用row_number()表达式:

select . . .,
       row_number() over (order by (score > 0)::int desc, score)

如果您想将它们完全排除在排名之外:

select . . .,
       (case when score > 0
             then row_number() over (partition by (score > 0)::int order by score)
        end) as score_seqnum

注意:我怀疑您真的想要rank(),所以分数相同的学生将获得相同的排名。

答案 1 :(得分:1)

我想问题不在于分数不是0,而是分数是NULL(其中NULL优先于其他值),您可以将查询重写为

select . . .,
       row_number() over (order by coalesce(score,-1) desc) as rnk
;