我从最高分的表中订购了一组记录。
Select name,score from score_tbl order by score desc
现在我要做的就是在score_tbl
上有一个名为position
的列,我想使用update语句根据select查询更新该列,以便更新位置用户的分数
答案 0 :(得分:0)
听起来您想根据“得分”字段更新表中所有行的“位置”值。换句话说,得分最高的行的位置值为1.试试这个:
UPDATE score_tbl
FROM (
SELECT name, RANK() OVER(ORDER BY score DESC) ScorePosition
FROM score_tbl
) src
SET position = src.ScoreRank
WHERE name = src.name
这使用“src”派生表,您可以在其中生成排名以更新目标表。这假设“名称”是您桌子的PK。
不确定您的数据库是什么,因此您可能需要稍微调整一下查询。但这应该让你去。让我知道它是怎么回事。
<强>更新强>
请尝试以下查询:
UPDATE competitors
INNER JOIN (
SELECT
id,
RANK() OVER w AS 'ScorePosition'
FROM competitors
WINDOW w AS (ORDER BY score DESC)
) src ON competitors.id = src.id
SET position = src.ScorePosition;
看起来在MySQL 8.0中引入了Windows功能,因此您需要访问该版本。我无法访问此版本,因此无法测试。但请告诉我它是否有效。
另外,请看一下这篇文章以寻求帮助: