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

161
Views
Seleccione el pedido con el contador de filas que no funciona como se esperaba

Mi orden de clasificación no es correcto, ¿en qué parte de esta consulta el orden no coincide con la clasificación?

 SELECT @r := @r+1 as rank, z.* FROM( SELECT u.user_id, u.score, c.username FROM `e_highscores` u JOIN ( SELECT cc.user_id, cc.username FROM e_users as cc ) as c ON u.user_id = c.user_id ORDER BY u.score DESC )z, (SELECT @r:=0)y;

Producción:

ingrese la descripción de la imagen aquí



Cambiando el orden por a:

 SELECT @r := @r+1 as rank, z.* FROM( SELECT u.user_id, u.score, c.username FROM `e_highscores` u JOIN ( SELECT cc.user_id, cc.username FROM e_users as cc ) as c ON u.user_id = c.user_id )z, (SELECT @r:=0)y ORDER BY z.score DESC

Produce:

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Creo una tabla en mi sandbox (mysql 5.7.31), y parece que su consulta podría obtener el resultado correcto:

 CREATE TABLE `e_highscores` ( `user_id` int(11) NOT NULL, `score` int(11) DEFAULT NULL, PRIMARY KEY (`user_id`) ) ENGINE=InnoDB; CREATE TABLE `e_users` ( `user_id` int(11) NOT NULL, `username` varchar(255) DEFAULT NULL, PRIMARY KEY (`user_id`) ) ENGINE=InnoDB; insert into `e_highscores` (user_id, score) values (2, 200), (15, 300), (11,121); insert into `e_users` (user_id, username) values (2, 'Pie'), (15, 'Adam'), (11, 'Hershey'); SELECT @r := @r+1 as urank, z.* FROM( SELECT u.user_id, u.score, c.username FROM `e_highscores` u JOIN e_users as c ON u.user_id = c.user_id ) z, (SELECT @r:=0) y ORDER BY z.score DESC;

El resultado es:

 1 15 300 Adam 2 2 200 Pie 3 11 121 Hershey

¿Supongo que su problema puede ser causado por la palabra clave 'rango' en mysql? ¿Podría decirme su versión de mysql, por favor?


mariadb es diferente con mysql cuando se usa una variable definida por el usuario con order by juntos.

Tenga cuidado con el orden de evaluación de las filas al ordenar. Parecería (al menos hasta donde lo he probado) que cuando las declaraciones de la forma:

SELECCIONE @var:= DESDE...

se ejecutan, @var siempre corresponderá al valor de la última fila devuelta, como era de esperar.

Pero si haces algo como:

SELECCIONE DISTINCT IFNULL(@var:=Name,'unknown') FROM Clientes ORDEN POR LÍMITE 10

La instrucción que contiene la asignación de la variable se ejecutará antes que la orden por . En este caso, el valor que queda en @var al final podría no corresponder a ninguna de las filas devueltas.

Consulte el documento oficial de mariadb para obtener más detalles.

Para generar el resultado correcto, utilice la siguiente consulta:

 select urank, t.user_id, t.score, c.username from ( select @row := @row + 1 as urank, u.user_id, u.score from e_highscores u order by score desc ) t join e_users as c on t.user_id = c.user_id order by score desc;
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!