SQL >> Base de Datos >  >> RDS >> Database

Cómo agregar posiciones de clasificación a las filas con DENSE_RANK() en SQL

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.