更新排名列时遇到问题
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。
我在 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。