gpt4 book ai didi

MySQL Rank 并列

转载 作者:可可西里 更新时间:2023-11-01 06:37:50 27 4
gpt4 key购买 nike

我是 sql 的新手,我从未在 mysql 中使用过变量或条件,但从其他编程语言中知道这一点。几天以来,我试图找到一种对用户分数进行排名的方法。我阅读了很多文章,也阅读了 stackoverflow 上提出的问题,最后我找到了一个几乎可以按照我想要的方式完成的解决方案。

SELECT
score_users.uid,
score_users.score,
@prev := @curr,
@curr := score,
@rank := IF(@prev = @curr, @rank, @rank +1) AS rank
FROM
score_users,
(SELECT @curr := null, @prev := null, @rank := 0) tmp_tbl
WHERE
score_users.matchday = 1
ORDER BY
score_users.score DESC

但我的问题是平分。我不想获得连续的排名,就像这样:

+------------+------+--------+
| uid | name | rank | score |
+------------+------+--------+
| 4 | Jon | 1 | 20 |
| 1 | Jane | 2 | 19 |
| 2 | Fred | 2 | 19 |
| 9 | July | 3 | 18 |
| 7 | Mary | 4 | 17 |
| 3 | Toni | 5 | 12 |
| 5 | Steve | 5 | 12 |
| 6 | Peter | 6 | 11 |
| 8 | Nina | 7 | 10 |
+------------+------+--------+

我想得到这样的结果:

+------------+------+--------+
| uid | name | rank | score |
+------------+------+--------+
| 4 | Jon | 1 | 20 |
| 1 | Jane | 2 | 19 |
| 2 | Fred | 2 | 19 |
| 9 | July | 4 | 18 |
| 7 | Mary | 5 | 17 |
| 3 | Toni | 6 | 12 |
| 5 | Steve | 6 | 12 |
| 6 | Peter | 8 | 11 |
| 8 | Nina | 9 | 10 |
+------------+------+--------+

我想我必须创建一个新的临时表,和一些 if 条件,但我找不到解决办法,变得绝望了!此外,我必须密切关注性能,也许有更好的方法可以像我一样获得得分排名?如果有提示或一些代码片段,我将不胜感激。

最佳答案

您可以使用另一个变量来计算相同的排名,而不是将 @rank 递增 1,而是将 @rank 递增计数器值,如下所示:

SELECT
score_users.uid,
score_users.score,
@prev := @curr,
@curr := score,
@rank := IF(@prev = @curr, @rank, @rank + @i) AS rank,
IF(@prev <> score, @i:=1, @i:=@i+1) AS counter
FROM
score_users,
(SELECT @curr := null, @prev := null, @rank := 0, @i := 0) tmp_tbl
WHERE
score_users.matchday = 1
ORDER BY
score_users.score DESC

关于MySQL Rank 并列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24118393/

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