Menu
Coddy logo textTech

RANK & DENSE_RANK Functions

Parte de la sección Fundamentos del Journey de SQL de Coddy — lección 65 de 72.

ROW_NUMBER() es un tipo de función de clasificación, y hay dos más: RANK() y DENSE_RANK().

La función RANK() numera las filas como ROW_NUMBER(), pero asigna números idénticos para las mismas filas y omite números. DENSE_RANK() es similar a RANK(), pero no omite números.

Por ejemplo:

idlevel
15
26
36
47
57
65
SELECT id, 
	ROW_NUMBER() OVER (ORDER BY level) as row_num,
	RANK() OVER (ORDER BY level) as row_rank,
	DENSE_RANK() OVER (ORDER BY level) as row_dense_rank
FROM table1

Esto devolverá:

idrow_numrow_rankrow_dense_rank
1111
6211
2332
3432
4553
5653

Explicación:

  • ROW_NUMBER(): Siempre único: 1, 2, 3, 4, 5, 6
  • RANK():
    • nivel 5 (2 filas): ambos obtienen rango 1
    • nivel 6 (2 filas): ambos obtienen rango 3 (salta 2)
    • nivel 7 (2 filas): ambos obtienen rango 5 (salta 4)
  • DENSE_RANK():
    • nivel 5 (2 filas): ambos obtienen rango 1
    • nivel 6 (2 filas): ambos obtienen rango 2 (sin salto)
    • nivel 7 (2 filas): ambos obtienen rango 3 (sin salto)
challenge icon

Desafío

Fácil

Tablas y columnas disponibles:

  • <strong>medals</strong>: <strong>region</strong>, <strong>medal_color</strong>, <strong>medal_count</strong>

Crea una consulta que muestre la región, el conteo total de medallas (suma de todas las medallas independientemente del color), y dos tipos de clasificaciones:

  1. Un regular_rank (con brechas) sobre la suma de medallas
  2. Un dense_rank (sin brechas) sobre la suma de medallas

Ordena el resultado por:

order by total_medals desc, region asc

Hoja de referencia

SQL proporciona tres funciones de clasificación que se comportan de manera diferente con valores empatados:

  • ROW_NUMBER() - asigna números secuenciales únicos
  • RANK() - asigna el mismo rango a valores empatados y omite los rangos subsiguientes
  • DENSE_RANK() - asigna el mismo rango a valores empatados sin omitir rangos

Por ejemplo:

idlevel
15
26
36
47
57
65
SELECT id, 
	ROW_NUMBER() OVER (ORDER BY level) as row_num,
	RANK() OVER (ORDER BY level) as row_rank,
	DENSE_RANK() OVER (ORDER BY level) as row_dense_rank
FROM table1

Esto devolverá:

idrow_numrow_rankrow_dense_rank
1111
6211
2332
3432
4553
5653

Pruébalo tú mismo

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos