Bastante nuevo en SQL, así que me disculpo si esto es obvio.
Tengo una tabla de la cantidad de juegos vendidos y su rango correspondiente en la lista de los más vendidos (1, 2, 3, etc.). Esta tabla se llama ranking (rank: bigint, global_sales: double).
Lo que quiero hacer es crear un procedimiento almacenado al que pueda llamar cada vez que se actualicen las ventas, y luego se puede llamar a este procedimiento para actualizar las clasificaciones. Esto es lo que tengo hasta ahora, y me temo que probablemente sea muy incorrecto:
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 ;Por lo que pude encontrar aquí y en Google, no pude encontrar nada similar, aunque esta es probablemente una consulta bastante común. Cualquier idea sería muy apreciada.
Editar: estoy usando MySQL Workbench versión 8.0 CE
puedes hacerlo en un bucle pero también puedes hacerlo en una consulta
Por supuesto, no conozco el diseño de sus tablas, pero eso le muestra cómo actualizaría
CREATE Table ranking (GameRank INt,global_sales INT);
INSERT INTO `ranking` VALUES(0,200),(0,300),(0,250),(0,125)
SELECT * FROM rankingRango de juego | ventas globales -------: | -----------: 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 DESCRango de juego | ventas globales -------: | -----------: 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 DESCRango de juego | ventas globales -------: | -----------: 1 | 300 2 | 250 3 | 200 4 | 125
db<>violín aquí