我正在使用Sequelize,我有这样一张桌子:
{{1}}
我一直在使用rank()来创建一个用户拥有更多积分的排名,或者哪些用户拥有更多积分用于给定的排行榜(lead1或lead2),但现在我需要找到用户的当前排名不同的排行榜(在示例表中是两个但可以是n),所以,我需要类似的东西:
用户1:
用户1 - lead1 - 15分 - 排名2
用户1 - lead2 - 20分 - 排名1
:
用户2 - lead1 - 25分 - 排名1
用户2 - lead2 - 10分 - 排名3
用户3:
我已经使用SQL了一段时间,但这变得有点复杂。
答案 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"
<强>输出强>
请记住,您有RANK()
和DENSE_RANK()
https://blog.jooq.org/2014/08/12/the-difference-between-row_number-rank-and-dense_rank/