[英]MySQL: Want to use a stored procedure to sort table by one column, then use that ordering to set values of another column
SQL 相当新,所以如果这很明显,我很抱歉。
我有一张销售游戏数量及其在畅销书排行榜中的相应排名(1、2、3 等)的表格。 这个表叫做ranking(rank: bigint, global_sales: double)。
我要做的是制作一个存储过程,每当销售更新时我都可以调用它,然后可以调用这个过程来更新排名。 这是我到目前为止所拥有的,恐怕它可能非常不正确:
delimiter $$
drop procedure if exists updateRank;
create procedure updateRank()
begin
select *
from ranking
order by global_sales desc;
declare r bigint default 1;
loop1: loop
GameRank = r;
set r=r+1;
end loop loop1;
end $$
delimiter ;
从我在这里和谷歌上可以找到的内容,我找不到任何类似的东西,尽管这可能是一个相当常见的查询。 任何见解将不胜感激。
编辑:我正在使用 MySQL Workbench 版本 8.0 CE
您可以在循环中执行,也可以在查询中执行
当然,我不知道您的表格布局,但是这些向您展示了您将如何更新
CREATE Table ranking (GameRank INt,global_sales INT);
INSERT INTO `ranking` VALUES(0,200),(0,300),(0,250),(0,125)
SELECT * FROM ranking
游戏等级 | global_sales --------: | ------------: 0 | 200 0 | 300 0 | 250 0 | 125
MYsql 5.x
SET @ranking = 0
UPDATE ranking r INNER JOIN (SELECT @ranking:= @ranking + 1 _rank, global_sales FROM ranking ORDER BY global_sales DESC) t ON r.global_sales = t.global_sales SET GameRank = _rank
SELECT * FROM ranking OrDER By global_sales DESC
游戏等级 | global_sales --------: | ------------: 1 | 300 2 | 250 3 | 200 4 | 125
MYSQL 8
UPDATE ranking r INNER JOIN (SELECT global_sales,RANK() OVER ( ORDER BY global_sales DESC ) my_rank FROM ranking) t ON r.global_sales = t.global_sales SET GameRank = my_rank
SELECT * FROM ranking OrDER By global_sales DESC
游戏等级 | global_sales --------: | ------------: 1 | 300 2 | 250 3 | 200 4 | 125
db<> 在这里摆弄
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.