题解 | #刷题通过的题目排名#
刷题通过的题目排名
https://www.nowcoder.com/practice/cd2e10a588dc4c1db0407d0bf63394f3
遇到了一个经典的问题:根据两列排名;根据第一列给出排名结果;根据第二列给出第一列一致时进一步的排名顺序
思路:使用OVER()窗口函数
函数选择:根据该图,我们可以选用DENSE_RANK()
错误方法:直接使用DENSE_RANK()进行排名
错误原因:因为ORDER BY中有两个依据,系统会再次根据第二个依据进行排名,排名会再次更改
正确方法:这个问题要先使用DENSE_RANK ()进行排民,形成FROM subquery,再全部重新排序
SELECT * FROM ( SELECT id, number, DENSE_RANK() OVER(ORDER BY number DESC) AS t_rank FROM passing_number ) AS rt ORDER BY number DESC, id