Compartir a través de


INSTRUCCION RANK y DENSE_RANK (es-ES)

Imagina que contamos con un grupo de alumnos de los cuales tenemos las notas obtenidas en las materias de Matemática, Humanidades, Derecho y queremos saber en base a su nota la posición obtenida del alumno en cada materia, para esto necesitaríamos clasificar las notas de mayor a menor.
Otro ejemplo podría ser si imaginamos una lista de productos agrupados por una categoría y queremos organizar los productos del más caro al más barato por cada categoría, la imagen de abajo muestra los datos sin ordenar.

 http://soportesql.files.wordpress.com/2012/02/ejemplo11.png
 
Para esto en SQL Server de Microsoft usamos la instrucciónes RANK ó DENSE_RANK RANK La instrucción RANK permite clasificar los elementos de un grupo en posiciones (primero, segundo, tercero…..n), si hay elementos con el mismo valor los coloca dentro de la misma posición (como en empate) pero al inmediato inferior le da la posición en base al numero de elementos existentes,
Ejemplo:
Select Categoria, NombreProducto, Precio, RANK () over(partitionby categoria orderby precio desc) as Posicion from Producto

 http://soportesql.files.wordpress.com/2012/02/ejemplo22.png

DENSE_RANK Igual que la instrucción RANK, permite clasificar los elementos de un grupo en posiciones (primero, segundo, tercero…..n), llenando totas las posiciones hasta quedarse sin elementos, si hay elementos con el mismo valor los coloca dentro de la misma posición (como en empate) y al inmediato inferior le da el correlativo siguiente a la clasificación de posición,

Ejemplo:
SELECT Categoria, NombreProducto, Precio, dense_rank()over(partitionby categoria orderby precio desc) as
Posicion from Producto

 http://soportesql.files.wordpress.com/2012/02/ejemplo32.png