我有一张桌子
我希望按照“得分”对其进行排序。下降,然后重命名' num'这样最高分将被命名为001,第二高002,下一个003等...
结果应如下所示:
到目前为止,我已经按照得分DESC对其进行了排序,但我不知道如何在每行中使用不同的名称重命名num。 我更喜欢这样做,没有程序或功能。
我在MySQL Workbench和MariaDB工作
答案 0 :(得分:1)
SELECT player,
score,
LPAD(@row:=@row+1, 3, '0') AS num
FROM Table1 T,(SELECT @row:=0)R
ORDER BY score DESC;
演示链接
<强>输出强>
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;
答案 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;