DENSE_RANK

Sintaxis del agregado

dense_rank_aggregate::=

Descripción de dense_rank_aggregate.gif sigue

Descripción de la ilustración dense_rank_aggregate.gif

Sintaxis analítica

dense_rank_analytic::=

Descripción de dense_rank_analytic.gif

Descripción de la ilustración dense_rank_analytic.gif

Véase también:

«Funciones analíticas» para información sobre la sintaxis, la semántica y las restricciones

Propósito

DENSE_RANKcalcular el rango de una fila en un grupo ordenado de filas y devolver el rango como un NUMBER. Los rangos son enteros consecutivos que comienzan por 1. El valor de rango más grande es el número de valores únicos devueltos por la consulta. Los valores de rango no se omiten en caso de empate. Las filas con valores iguales para los criterios de clasificación reciben el mismo rango. Esta función es útil para la presentación de informes top-N y bottom-N.

Esta función acepta como argumentos cualquier tipo de datos numéricos y devuelve NUMBER.

  • Como función agregada, DENSE_RANK calcula el rango denso de una fila hipotética identificada por los argumentos de la función con respecto a una especificación de ordenación dada. Los argumentos de la función deben evaluarse como expresiones constantes dentro de cada grupo de agregación, ya que identifican una única fila dentro de cada grupo. Las expresiones constantes de los argumentos y las expresiones en el order_by_clause del agregado coinciden por posición. Por lo tanto, el número de argumentos debe ser el mismo y los tipos deben ser compatibles.

  • Como función analítica, DENSE_RANK calcula el rango de cada fila devuelta de una consulta con respecto a las demás filas, basándose en los valores del value_exprs en el order_by_clause.

Ejemplo de agregación

El siguiente ejemplo calcula el rango de un empleado hipotético con un salario de 15.500 dólares y una comisión del 5% en la tabla de muestra oe.employees:

SELECT DENSE_RANK(15500, .05) WITHIN GROUP (ORDER BY salary DESC, commission_pct) "Dense Rank" FROM employees; Dense Rank------------------- 3

Ejemplo analítico

La siguiente sentencia selecciona el nombre del departamento, el nombre del empleado y el salario de todos los empleados que trabajan en el departamento de recursos humanos o en el de compras y, a continuación, calcula un rango para cada salario único en cada uno de los dos departamentos. Los salarios que son iguales reciben el mismo rango. Compare este ejemplo con el de RANK.

SELECT d.department_name, e.last_name, e.salary, DENSE_RANK() OVER (PARTITION BY e.department_id ORDER BY e.salary) AS drank FROM employees e, departments d WHERE e.department_id = d.department_id AND d.department_id IN ('30', '40');DEPARTMENT_NAME LAST_NAME SALARY DRANK----------------------- ------------------ ---------- ----------Purchasing Colmenares 2500 1Purchasing Himuro 2600 2Purchasing Tobias 2800 3Purchasing Baida 2900 4Purchasing Khoo 3100 5Purchasing Raphaely 11000 6Human Resources Marvis 6500 

Leave a Reply