Consulta SQL para determinar una lista de clasificación

Hoy me encontré con la siguiente tarea mientras trabajaba en el proyecto de un cliente: tome un "usuario" de la tabla SQL con las columnas "id" y "puntuación" y determine una clasificación de todos los usuarios según la "puntuación" en la que los usuarios con el obtener el mismo ranking con la misma puntuación. Esta tarea se puede resolver de forma intuitiva y sencilla mediante el uso de variables definidas por el usuario .


CREATE TABLE
    user(id INT, score INT);
INSERT INTO
    user(id, score)
VALUES
    (1, 10), (2, 40), (3, 55), (4, 10), (5, 5), (6, 20), (7, 30), (8, 70), (9, 30)

El uso de dos variables resuelve esto simplemente

SET @score_prev = NULL;
SET @cur_rank = 0;
SELECT id, score, CASE
    WHEN @score_prev = score THEN @cur_rank
    WHEN @score_prev := score THEN @cur_rank := @cur_rank + 1
END AS rank
FROM user
ORDER BY score DESC

y obtienes el resultado que deseas

+--------+-----------+----------+
|  *id*  |  *score*  |  *rank*  |
|    8   |      70   |      1   |
|    3   |      55   |      2   |
|    2   |      40   |      3   |
|    7   |      30   |      4   |
|    9   |      30   |      4   |
|    6   |      20   |      5   |
|    1   |      10   |      6   |
|    4   |      10   |      6   |
|    5   |       5   |      7   |
+--------+-----------+----------+
Atrás