I am trying to update a table in my database using ROW_NUMBER in mysql.
Table stats
:
x
id value value_rank
-------------------------------
1 635550348443 NULL
2 615342703162 NULL
3 968101508609 NULL
4 976724336509 NULL
5 978154497567 NULL
I tried using the ROW_NUMBER
alone as:
SELECT id, value, ROW_NUMBER() OVER w AS value_rank FROM stats WINDOW w AS (ORDER BY value DESC)
and got the following result:
id value value_rank
-------------------------------
5 978154497567 1
4 976724336509 2
3 968101508609 3
1 635550348443 4
2 615342703162 5
Then, I tried to update the value_rank using this statement:
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;
However, I got the following error:
Error in query (1064): Syntax error near ‘(SELECT id, value, ROW_NUMBER() OVER w AS rank FROM stats WINDOW w AS (O’ at line 2
I used this query after following this documentation (last paragraph)
What am I doing wrong?
Advertisement
Answer
You need 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;