更新排名列时遇到问题

Having an issue with updating a rank column

我在 MySQL 中的知识正在更新 select 通过 PHP 删除安装。我在谷歌上搜索了这个并转到 Stack overflow 搜索词是 MySQL 排名更新。我发现的那些可以帮助我。告诉他们如何修复它的人。告诉他们通过 select 而不是更新来做到这一点,甚至告诉他们如何去做。

我知道怎么做是通过 select Google 教我的。

我需要通过更新来完成。

Table 和查询在下面。

Table

region_id pst rank
101 20 1
101 19 2
101 19 2
101 15 4
100 20 1
100 13 2

查询

UPDATE `test1`
SET `rank` =
RANK() OVER(PARTITION BY `region_id` ORDER BY `pst` DESC)

当我 运行 此代码时,出现此错误。 Window 函数只允许在 SELECT 列表和 ORDER BY 子句中使用。

你能告诉我如何解决这个问题吗?

感谢您在进阶阶段的帮助

您需要将 table 连接到 returns 排名的查询:

UPDATE test1 t1
INNER JOIN (
  SELECT region_id, pst, 
         RANK() OVER (PARTITION BY region_id ORDER BY pst DESC) `rank` 
  FROM test1
) t2 ON t2.region_id = t1.region_id AND t2.pst = t1.pst
SET t1.`rank` = t2.`rank`;

参见demo