Problema:
Desea agregar una posición de clasificación a las filas de forma consecutiva, incluso si las filas tienen los mismos valores.
Ejemplo:
Nuestra base de datos tiene una tabla llamada competition
con datos en las siguientes columnas:id
(clave principal), first_name
, last_name
y score
.
id | nombre | apellido | puntuación |
11 | Juan | Tomás | 345 |
14 | María | Johnson | 222 |
16 | Lisa | Marrón | 154 |
23 | Alan | Blake | 222 |
32 | Cris | Taylor | 154 |
Vamos a mostrar todos los detalles sobre los estudiantes:su apellido, nombre y puntajes ordenados por score
en orden descendente. No queremos omitir los números de posición si algunos puntajes son los mismos para más de un estudiante.
Solución 1:
SELECT DENSE_RANK() OVER(ORDER BY score DESC) AS d_rank, first_name, last_name, score FROM competition;
Observe que la clasificación va del 1 al 3.
Discusión:
Usa DENSE_RANK
si no desea omitir las posiciones de clasificación después de las filas con la misma clasificación. En nuestro ejemplo, aunque Mary y Alan tienen el mismo rango de 2, la posición de Lisa es 3.