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
ROW_NUMBER(): Asigna un número secuencial simple (1, 2, 3...) a cada fila, rompiendo los empates arbitrariamente.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.DENSE_RANK(): Densifica rangos: 1, 2, 2, 3. Nunca hay un espacio después de un empate.
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"!
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).
Mostrar pista
DENSE_RANK() SOBRE(ORDENAR POR id DESC).
Solución disponible después de 3 intentos
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'.
Mostrar pista
Combine PARTICIÓN POR categoría_id ORDEN POR precio DESC dentro de OVER.
Solución disponible después de 3 intentos