这道题目要求我们对用户通过的题目数量进行排名。我们要做的事情如下:
1. 确定总体问题
我们需要根据每个用户通过的题目数量进行降序排名,并且对于通过题目数量相同的用户,给予相同的排名。最后,结果需要按照排名升序排列,如果排名相同,则按用户ID升序排列。
2. 分析关键问题
- 计算排名:使用
DENSE_RANK
窗口函数根据通过的题目数量进行降序排名。 - 排序输出:按排名升序排列,如果排名相同则按用户ID升序排列。
3. 解决每个关键问题的代码及讲解
步骤1:计算排名
我们使用DENSE_RANK
窗口函数根据通过的题目数量进行降序排名:
select
id,
number,
dense_rank() over (
order by
number desc
) as t_rank
from
passing_number
DENSE_RANK() OVER (ORDER BY number DESC) AS t_rank
:使用DENSE_RANK
函数对通过的题目数量进行降序排名。DENSE_RANK
会为相同数量的题目分配相同的排名。
步骤2:排序输出
我们使用ORDER BY
按排名升序排列,如果排名相同则按用户ID升序排列:
order by
t_rank asc,
id asc
ORDER BY t_rank ASC, id ASC
:按排名升序排列,如果排名相同则按用户ID升序排列。
完整代码
select
id,
number,
dense_rank() over (
order by
number desc
) as t_rank
from
passing_number
order by
t_rank asc,
id asc;