我有一张看起来像这样的表:
+-------------------+---------------------+
| 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 |
+-------------------+---------------------+-------------------+
答案 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;。因此,这将返回从第五行开始直到第十行的行。
击><击> 撞击>