SQL/Presto:如何在每个组的子组内排名
SQL/Presto: how to rank within a subgroup of each group
我有一个 table 如下所示:
group_id sub_group_id user_id score time
1 a1 ann 1 2019
1 a1 bob 1 2020
1 a2 cat 0 2020
2 b1 dan 0 2019
2 b1 eva 0 2019
2 b1 ed 1 2020
2 b2 liz 1 2020
我想按分数对每个组的子组内的 user_id 进行排名,然后按时间(越早越好)每个 user_id 获得。所以所需的输出是
group_id sub_group_id user_id score time rank
1 a1 ann 1 2019 1
1 a1 bob 1 2020 2
1 a2 cat 0 2020 1
2 b1 dan 0 2019 1
2 b1 eva 0 2019 1
2 b1 ed 1 2020 2
2 b2 liz 1 2020 1
使用rank()
:
select t.*,
rank() over (partition by group_id, sub_group_id order by score desc, time) as ranking
from t;
实际上,我不确定高分是否比低分好,所以你可能想要 score asc
。
我有一个 table 如下所示:
group_id sub_group_id user_id score time
1 a1 ann 1 2019
1 a1 bob 1 2020
1 a2 cat 0 2020
2 b1 dan 0 2019
2 b1 eva 0 2019
2 b1 ed 1 2020
2 b2 liz 1 2020
我想按分数对每个组的子组内的 user_id 进行排名,然后按时间(越早越好)每个 user_id 获得。所以所需的输出是
group_id sub_group_id user_id score time rank
1 a1 ann 1 2019 1
1 a1 bob 1 2020 2
1 a2 cat 0 2020 1
2 b1 dan 0 2019 1
2 b1 eva 0 2019 1
2 b1 ed 1 2020 2
2 b2 liz 1 2020 1
使用rank()
:
select t.*,
rank() over (partition by group_id, sub_group_id order by score desc, time) as ranking
from t;
实际上,我不确定高分是否比低分好,所以你可能想要 score asc
。