Problema:
Desea clasificar los registros omitiendo las posiciones de clasificación después de las filas que tienen la misma clasificación.
Ejemplo:
Nuestra base de datos tiene una tabla llamada championship
con datos en las siguientes columnas:id
(clave principal), user_name
y score
.
id | nombre_de_usuario | puntuación |
111 | Juan | 12 |
112 | María | 23 |
115 | Lisa | 45 |
120 | Alan | 23 |
221 | Cris | 23 |
Vamos a mostrar los nombres de todos los usuarios y sus puntajes ordenados en orden descendente y clasificados por puntaje.
Solución 1:
SELECT RANK() OVER(ORDER BY score DESC) AS rank_place, user_name, score FROM championship;
Esta consulta devuelve la siguiente clasificación:
rank_place | nombre_de_usuario | puntuación |
1 | Lisa | 45 |
2 | María | 23 |
2 | Alan | 23 |
2 | Cris | 23 |
5 | Juan | 12 |
Observe que el número de rango es del 1 al 5, ordenado por puntuación en orden descendente.
Discusión:
Usa RANK
si desea omitir posiciones de clasificación después de filas con la misma clasificación. En nuestro ejemplo, Mary, Alan y Chris tenían la misma clasificación de 2. La siguiente posición elegible es 5 (calculada a partir de 2 + 3 filas con la misma clasificación).