题解 | #刷题通过的题目排名#
刷题通过的题目排名
https://www.nowcoder.com/practice/cd2e10a588dc4c1db0407d0bf63394f3
select p.id, p.number, dense_rank() over(order by p.number desc) as t_rank from passing_number p order by p.number desc, id asc
dense_rank的用法,注意不用每次用窗口函数都用partition by,我这里用了结果都是1。partition by相当于group by
出现RANK()
函数结果全是1的原因在于PARTITION BY
子句的使用方式。PARTITION BY p.id
意味着对于每个唯一的p.id
值,数据库都会创建一个分区,并在该分区内独立地计算排名。由于每个id
在您的表中是唯一的(假设id
是主键或具有唯一性约束),每个分区实际上只包含一行数据。
因此,在每个由唯一id
值构成的分区内,RANK()
函数只能为该行分配排名1,因为没有其他行可以与之比较或共享相同的排名。