我有一個具有以下結構的資料庫:
ID GROUP VALUE RANK
2 1 999 0
1 1 888 0
3 2 777 0
4 2 111 0
我需要根據“VALUE”列和“GROUP”列分組來更新“RANK”列。基本上,在上面的例子中,我應該得到:
ID GROUP VALUE RANK
2 1 999 1
1 1 888 2
3 2 777 1
4 2 111 2
我嘗試遵循另一個答案并稍微更改查詢:
SET @r=0;
UPDATE `table` SET `RANK` = @r:= (@r 1) ORDER BY `VALUE` DESC;
至
SET @r=0;
UPDATE `table` SET `RANK` = @r:= (@r 1) PARTITION BY `GROUP` ORDER BY `VALUE` DESC;
但這會引發錯誤。或者,這種方法會產生正確的排名:
SELECT `ID`,
RANK() OVER (PARTITION BY `GROUP` ORDER BY `VALUE`) as `RANK`
FROM table;
但它不會更新資料庫中的“RANK”列。我稍微喜歡第二種解決方案而不是第一種解決方案,但是如何將查詢的輸出保存到 RANK 列?
uj5u.com熱心網友回復:
將表連接到陳述句中的最后一個查詢(也在DESC子句ORDER BY中使用)UPDATE:
UPDATE tablename t
INNER JOIN (
SELECT id, RANK() OVER (PARTITION BY `GROUP` ORDER BY `VALUE` DESC) AS `RANK`
FROM tablename
) r ON r.ID = t.ID
SET t.`RANK` = r.`RANK`;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/485555.html
下一篇:如何加快SELECTSQL查詢?
