Попытка обновить таблицу в mysql 8.0 с помощью ROW_NUMBER не удалась в подзапросе - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь обновить таблицу в моей базе данных, используя ROW_NUMBER в mysql.

Таблица stats:

id  value           value_rank
-------------------------------
1   635550348443    NULL
2   615342703162    NULL
3   968101508609    NULL
4   976724336509    NULL
5   978154497567    NULL

Я пытался использовать только ROW_NUMBER как:

SELECT id, value, ROW_NUMBER() OVER w AS value_rank FROM stats WINDOW w AS (ORDER BY value DESC)

и получил следующий результат:

id  value           value_rank
-------------------------------
5   978154497567    1
4   976724336509    2
3   968101508609    3
1   635550348443    4
2   615342703162    5

Затем я попытался обновить value_rank с помощью этого оператора:

UPDATE stats
(SELECT id, value, ROW_NUMBER() OVER w AS rank FROM stats WINDOW w AS (ORDER BY value DESC)) as ranks 
SET stats.value_rank = ranks.rank
WHERE stats.id = ranks.id;

Однако я получил следующая ошибка:

Ошибка в запросе (1064): синтаксическая ошибка рядом с '(SELECT id, value, ROW_NUMBER () OVER w AS rank ОТ статистики STD WINDOW w AS (O' в строке 2

Я использовал этот запрос после следования этой документации (последний абзац)

Что я делаю не так?

1 Ответ

1 голос
/ 30 апреля 2020

Вам нужно JOIN:

UPDATE stats s JOIN
       (SELECT id, value, ROW_NUMBER() OVER w AS rank
        FROM stats
        WINDOW w AS (ORDER BY value DESC)
       ) r
       ON s.id = r.id 
    SET s.value_rank = t.rank;
...