gpt4 book ai didi

postgresql - 获取用户在多个排行榜中的排名

转载 作者:行者123 更新时间:2023-11-29 12:02:56 24 4
gpt4 key购买 nike

我正在使用 Sequelize,我有一个这样的表:

+--------+-------------+--------+
| userId | leaderboard | points |
+--------+-------------+--------+
| 1 | lead1 | 10 |
| 1 | lead2 | 20 |
| 1 | lead1 | 5 |
| 2 | lead2 | 10 |
| 2 | lead1 | 10 |
| 2 | lead1 | 15 |
| 3 | lead2 | 15 |
+--------+-------------+--------+

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

对于用户 1:

  • 用户 1 - 领导 1 - 15 分 - 排名 2

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

对于用户 2:

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

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

对于用户 3:

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

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

最佳答案

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/

关于postgresql - 获取用户在多个排行榜中的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46779645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com