获取范围之间的排名列表

时间:2015-06-17 15:15:39

标签: mysql

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

+-------------------+---------------------+
| 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 |
+-------------------+---------------------+-------------------+

1 个答案:

答案 0 :(得分:1)

这是一个使用MySQL用户定义变量计算" rank",分配相同" rank"的示例。价值与"关系"对于积分。

IPAddress ipAddr = IPAddress.Parse(richTextBox1.Text);

<击>

<击>

原始答案

您可以将 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

在这个例子中,LIMIT子句说&#34;跳过前四行并返回接下来的六行&#34;。因此,这将返回从第五行开始直到第十行的行。

<击>