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