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