使用最高值descing的选择查询顺序更新列

时间:2017-12-09 20:53:21

标签: mysql sql

我从最高分的表中订购了一组记录。

Select name,score from score_tbl order by score desc

现在我要做的就是在score_tbl上有一个名为position的列,我想使用update语句根据select查询更新该列,以便更新位置用户的分数

1 个答案:

答案 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功能,因此您需要访问该版本。我无法访问此版本,因此无法测试。但请告诉我它是否有效。

另外,请看一下这篇文章以寻求帮助:

How do I UPDATE from a SELECT in SQL Server?