重新编号行 - 按分数列排序并更改序列列

时间:2018-05-31 13:46:46

标签: sql mariadb

我有一张桌子

我希望按照“得分”对其进行排序。下降,然后重命名' num'这样最高分将被命名为001,第二高002,下一个003等...

结果应如下所示:

到目前为止,我已经按照得分DESC对其进行了排序,但我不知道如何在每行中使用不同的名称重命名num。 我更喜欢这样做,没有程序或功能。

我在MySQL Workbench和MariaDB工作

2 个答案:

答案 0 :(得分:1)

SELECT player, 
       score,
       LPAD(@row:=@row+1, 3, '0') AS num
FROM Table1 T,(SELECT @row:=0)R
ORDER BY score DESC;

演示链接

  

http://sqlfiddle.com/#!9/562802/5

<强>输出

player  score   num
Susu    1105    001
Susu    944     002
Susu    816     003
Susu    760     004
Susu    748     005
Susu    649     006
Susu    549     007
Susu    378     008
Susu    253     009

对于使用新num更新原始表格,您可以使用Update Using Join

UPDATE Table1 T1 JOIN (SELECT * FROM (SELECT player, 
       score,
       LPAD(@row:=@row+1, 3, '0') AS num
FROM Table1 T,(SELECT @row:=0)R
ORDER BY score DESC
)T3)T2  
ON (T1.player=T2.player 
AND T1.score=T2.score)
SET T1.num=T2.num;
  

http://sqlfiddle.com/#!9/6ca321/1

答案 1 :(得分:0)

您可以使用row_number()功能:

select *, row_number() over (order by score desc) as num
from table t;

然而,这将产生没有填充零的序列号。

由于 MariaDB 没有分析功能,您可以使用:

SET @num = 0;

select player, score, @num:= @num+1 AS num
from table t
order by score desc;