Ответ 1
SET @rank:=0;
update T
set [email protected]:[email protected]+1;
UPDATE
альтернативный способ с одним утверждением
UPDATE T
JOIN (SELECT @rank := 0) r
SET [email protected]:[email protected]+1;
У меня есть таблица со столбцами: (это всего лишь пример, у меня 50K записей)
Name, Number
Joe Null
Michael Null
Moses Null
Я обновляю номер с порядковым номером от 1-3, чтобы он выглядел следующим образом:
Name, Number
Joe 1
Michael 2
Moses 3
Как я могу сделать это в SQL для Mysql в одной команде SQL
SET @rank:=0;
update T
set [email protected]:[email protected]+1;
UPDATE
альтернативный способ с одним утверждением
UPDATE T
JOIN (SELECT @rank := 0) r
SET [email protected]:[email protected]+1;
Я изо всех сил пытался найти ответ онлайн и нашел для меня следующий метод, основанный на некоторой информации выше, но с другим подходом к обновлению. Проводка здесь, если она помогает другим.
Примечание: для моего набора данных ранг является одноразовым фиксированным вычислением, он не изменится. Я хотел бы добавить его в качестве столбца, чтобы сохранить выполнение вычислений каждый раз, когда я извлекаю данные из MySQL в Python.
Решение, которое я использовал:
Используемые имена образцов, rowid - уникальный идентификатор для каждой строки, значение - это метрика, которая будет использоваться для определения ранга для каждой строки
SET @rank=0;
CREATE TEMPORARY TABLE rank_temp
AS
(SELECT rowid, value, @rank:[email protected]+1 AS rank FROM source_table ORDER BY value ASC);
UPDATE sourcetable a, rank_temp b
SET a.rank = b.rank
WHERE a.rowid = b.rowid;
Это грубый метод, но он работал над моим набором данных.
Вы можете попробовать установить Number
в AUTO_INCREMENT, чтобы числа были сгенерированы:
ALTER TABLE your_table MODIFY Number INT AUTO_INCREMENT
Кроме этого, вам, вероятно, понадобится: а) хранимые процедуры b) код приложения