Oracle: Los N primeros resultados RANK

Esta semana debido a una tarea un tanto “especial” para un cliente y gracias a mi compañero de trabajo (@Skoner78) he descubierto una opción de oracle realmente interesante que permite crear un ranking en una consulta de modo que dentro de la misma podamos desechar datos que no queremos mostrar.

Rank es una función analítica de Oracle disponible desde la versión 8i y que devuelve el rango de un valor en un conjunto. Igual que RANK existe DENSE_RANK, la diferencia entre las dos, es que con RANK puede clasificar valores no consecutivos si los valores evaluados son los mismos y DENSE_RANK siempre dará resultados consecutivos.

Utilizando el mismo ejemplo que nos ofrece la documentación de Oracle:

SELECT department_id, last_name, salary, commission_pct,
   RANK() OVER (PARTITION BY department_id
   ORDER BY salary DESC, commission_pct) "Rank"
   FROM employees WHERE department_id = 80;

La anterior sintaxis nos devolverá todos los empleados del departamento 80 y su ranking será ordenado por salario y comisión. Una vez creado un ranking con los datos podemos extraer los N que más nos interese mostrar o desechar un grupo de ellos que no estén en el mismo peldaño del ranking que los que queremos.