обновление столбцов с порядковым номером mysql - PullRequest
33 голосов
/ 08 июля 2011

У меня есть таблица со столбцами: (это только пример, у меня 50К записей)

Name,   Number

Joe     Null
Michael Null
Moses   Null

I, чтобы обновить номер порядковым номером от 1-3, чтобы он выглядел следующим образом:

Name,   Number

Joe     1
Michael 2
Moses   3

Как я могу сделать это в SQL для Mysql в одной команде SQL

Ответы [ 3 ]

100 голосов
/ 08 июля 2011
SET @rank:=0;
update T
set Number=@rank:=@rank+1;

UPDATE

альтернативный способ с одним утверждением

UPDATE T
JOIN (SELECT @rank := 0) r
SET Number=@rank:=@rank+1;
2 голосов
/ 01 июля 2015

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

Примечание: для моего набора данных ранг является одноразовым фиксированным вычислением, он не изменится. Я хотел добавить его в качестве столбца, чтобы сохранить выполнение вычислений при каждом извлечении данных из MySQL в Python.

Решение, которое я использовал:

  • установить ранг на 0 (как указано выше)
  • создать временную таблицу, содержащую запрос на выборку для вычисления ранга
  • обновить исходную таблицу с вычисленными рангами.

Используются примеры имен, rowid - уникальный идентификатор для каждой строки, значение - метрика, которая будет использоваться для определения ранга для каждой строки

SET @rank=0;
CREATE TEMPORARY TABLE rank_temp
AS
(SELECT rowid, value, @rank:=@rank+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;

Это грубый метод, но он работал с моим набором данных.

2 голосов
/ 08 июля 2011

Вы можете попробовать установить для Number значение AUTO_INCREMENT, чтобы сгенерировать числа:

ALTER TABLE your_table MODIFY Number INT AUTO_INCREMENT

Кроме этого, вам, вероятно, потребуется: а) сохраненные подпрограммы б) код приложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...