Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

172
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!