gpt4 book ai didi

mysql - 获取范围之间的排名列表

转载 作者:行者123 更新时间:2023-11-29 12:09:49 26 4
gpt4 key购买 nike

我有一个看起来像这样的表格:

+-------------------+---------------------+
| Username(varchar) | Points(integer) |
+-------------------+---------------------+
| User #0 | 1000 |
| User #1 | 900 |
| User #2 | 900 |
| User #3 | 810 |
| User #4 | 800 |
| User #5 | 790 |
| User #6 | 750 |
| User #7 | 749 |
| User #8 | 730 |
| User #9 | 650 |
| User #10 | 600 |
| User #11 | 550 |
| User #12 | 450 |
+-------------------+---------------------+

我需要一个可以输入 2 个数字的查询。例如,我只想查看位置 2 - 6。我希望你能告诉我如何做到这一点。人们可以拥有相同数量的积分。用户 #1 和用户 #2 获得了相同的金额,因此我需要 6 行而不是 5 行,如果很容易,我会使用按点排序和限制

输出应如下所示:

+-------------------+---------------------+-------------------+
| Username(varchar) | Points(integer) | Rank |
+-------------------+---------------------+-------------------+
| User #1 | 900 | 2 |
| User #2 | 900 | 2 |
| User #3 | 810 | 3 |
| User #4 | 800 | 4 |
| User #5 | 790 | 5 |
| User #6 | 750 | 6 |
+-------------------+---------------------+-------------------+

最佳答案

下面是一个使用 MySQL 用户定义变量来计算“排名”的示例,为分数的“并列”分配相同的“排名”值。

  SELECT r.username
, r.points
, r.rank
FROM ( SELECT t.username
, @rank := IF(t.points=@prev_points,@rank,@rank+1) AS rank
, @prev_points := t.points AS points
FROM mytable t
CROSS
JOIN ( SELECT @rank := 0, @prev_points := NULL ) i
ORDER BY t.points DESC, t.username DESC
) r
WHERE r.rank BETWEEN 2 AND 6
ORDER BY r.points DESC, r.username DESC

<罢工>

<罢工>

原答案对原答案

您可以使用 LIMIT子句与 ORDER BY 结合使用.

例如:

  SELECT t.username, t.points
FROM mytable t
ORDER BY t.points DESC, t.username DESC
LIMIT 4,6

在此示例中,LIMIT 子句表示“跳过前四行并返回接下来的六行”。因此,这将返回从第五行开始到第十行的行。

<罢工>

关于mysql - 获取范围之间的排名列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30895671/

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