Saltar al contenido principal
eLearner.app
Módulo 13 · Lección 3 de 451/57 en el curso~15 min
Lecciones del módulo (3/4)

Clasificaciones: ROW_NUMBER, RANK y DENSE_RANK

Clasificaciones: ROW_NUMBER, RANK y DENSE_RANK

Más allá de agregar, las funciones de ventana destacan en el orden y la clasificación. Hay funciones diseñadas específicamente para funcionar dentro de ventanas (OVER() se vuelve obligatorio) que asignan números secuenciales o posiciones de clasificación.

Para que funcionen según un criterio, tenemos que usar la cláusula ORDER BY dentro de OVER().

El trío de clasificación

  1. ROW_NUMBER(): Asigna un número secuencial simple (1, 2, 3...) a cada fila, rompiendo los empates arbitrariamente.
  2. RANK(): Produce el efecto "Olimpíadas": 1, 2, 2, 4. Deja un hueco (se salta el "3") y asigna el mismo rango en caso de empate.
  3. DENSE_RANK(): Densifica rangos: 1, 2, 2, 3. Nunca hay un espacio después de un empate.
SQL
SELECT
  product_name,
  price,
  RANK() OVER(ORDER BY price DESC) AS price_rank
FROM products;

¡Al combinar PARTITION BY y ORDER BY dentro de OVER() podemos obtener "los 3 mejores para cada categoría"!

Ejercicio#sql.m13.l3.e1
Intentos: 0Cargando...

Extraiga 'first_name', 'last_name' e 'id' de la tabla de clientes ("clientes") (suponga que 'id' es el número de identificador). Agregue una columna de 'clasificación' usando DENSE_RANK() basada en 'id' descendente (de mayor a menor).

Cargando editor...
Mostrar pista

DENSE_RANK() SOBRE(ORDENAR POR id DESC).

Solución disponible después de 3 intentos

Ejercicio#sql.m13.l3.e2
Intentos: 0Cargando...

Cree una clasificación para cada 'category_id' basada en el precio de los productos ("products"). Extraiga 'category_id', 'id', 'price' y agregue 'price_rank' usando ROW_NUMBER() en orden descendente de 'price', dividiendo por 'category_id'.

Cargando editor...
Mostrar pista

Combine PARTICIÓN POR categoría_id ORDEN POR precio DESC dentro de OVER.

Solución disponible después de 3 intentos