在多个排行榜中获得用户排名

时间:2017-10-16 21:51:43

标签: postgresql sequelize.js

我正在使用Sequelize,我有这样一张桌子:

{{1}}

我一直在使用rank()来创建一个用户拥有更多积分的排名,或者哪些用户拥有更多积分用于给定的排行榜(lead1或lead2),但现在我需要找到用户的当前排名不同的排行榜(在示例表中是两个但可以是n),所以,我需要类似的东西:

用户1:

  • 用户1 - lead1 - 15分 - 排名2

  • 用户1 - lead2 - 20分 - 排名1

用户2的

  • 用户2 - lead1 - 25分 - 排名1

  • 用户2 - lead2 - 10分 - 排名3

用户3:

  • 用户3 - lead2 - 15分 - 排名2

我已经使用SQL了一段时间,但这变得有点复杂。

1 个答案:

答案 0 :(得分:3)

<强> SQL DEMO

WITH total_points as (
     SELECT   "userId", "leaderboard", SUM("points") as  "points"
     FROM Table1
     GROUP BY "userId", "leaderboard"
)     

SELECT "userId", "leaderboard", "points",
        RANK() OVER (PARTITION BY "leaderboard" ORDER BY "points" DESC) as ranking
FROM total_points    
ORDER BY "userId", "leaderboard"

<强>输出

enter image description here

请记住,您有RANK()DENSE_RANK()

https://blog.jooq.org/2014/08/12/the-difference-between-row_number-rank-and-dense_rank/