Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

178
Visualizações
MySQL: desea usar un procedimiento almacenado para ordenar la tabla por una columna, luego use ese orden para establecer los valores de otra columna

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

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

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 ranking
Rango 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 DESC
Rango 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 DESC
Rango de juego | ventas globales
-------: | -----------:
       1 | 300
       2 | 250
       3 | 200
       4 | 125

db<>violín aquí

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda