Перенумеровать строки - сортировка по столбцу оценки и изменение столбца последовательности - PullRequest
0 голосов
/ 31 мая 2018

У меня есть таблица

, которую я хочу отсортировать по убыванию «счет», а затем переименовать «num», чтобы получить наивысший баллбудет назван 001, второй по величине 002, следующий 003 и т. д. ...

Результат должен выглядеть следующим образом:

К настоящему времени я отсортировал его по счету DESC, но я не знаю, как переименовать num в каждом ряду с другим именем.Я бы предпочел, чтобы это было сделано без процедур или функций.

Я работаю в MySQL Workbench и MariaDB

Ответы [ 2 ]

0 голосов
/ 31 мая 2018
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

0 голосов
/ 31 мая 2018

Вы можете использовать функцию 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...