mysql(mariadb)按顺序获取行位置

laik7k3q  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(295)

首先,我已经看了这篇文章,但我不能让它工作。
所以我想通过一组参数得到一行在表中的位置。e、 我有一张表格,里面有各种统计数字。看起来像这样。

+-----------+-------+--------+------+--------------+
| player_id | kills | deaths | wins | played_games |
+-----------+-------+--------+------+--------------+
|         1 |     0 |      2 |    1 |            3 |
|         2 |     0 |      1 |    0 |            1 |
|         3 |     0 |      0 |    0 |            0 |
|         5 |     0 |      1 |    0 |            1 |
|        13 |     0 |      1 |    0 |            1 |
|        14 |     3 |      1 |    2 |            3 |
|        29 |     0 |      3 |    0 |            3 |
|        30 |     0 |      1 |    0 |            2 |
|        32 |     5 |      0 |    1 |            1 |
+-----------+-------+--------+------+--------------+

所以我想显示玩家的排名位置排序的胜利。在这个例子中,玩家14的排名是1。
我可以通过wins asc从tbl order执行一个简单的select*,然后枚举行,但是仅仅为一行加载一个可能很大的结果集似乎是浪费。

7xzttuei

7xzttuei1#

如果运行的是mariadb 10.3或更高版本,只需使用窗口函数:

select t.*, rank() over(order by wins desc) rn
from mytable t
order by wins desc
``` `rank()` 将相同的分数分配给获胜次数相同的玩家。
在早期版本中,一个仿真选项是相关子查询:

select
t.,
(select count(
) + 1 from mytable t1 where t1.wins > t.wins) rn
from mytable t
order by wins desc

相关问题