Ir al contenido principal

Funciones Grupo Anidadas

Recordando que las funciones Single-Row puede ser anidadas a cualquier nivel de profundidad. Las Funciones Grupo pueden solo ser anidadas a dos niveles de profundidad.

G1( group_item ) = result
G1( G2( group_item ) ) = result
G1(G2 ( G3 ( group_item ) ) ) No es permitido.

Las funciones grupo en este ejemplo son presentadas mediante la letra G seguida de un numero. La primera forma simple no contiene funciones anidadas. Ejemplo de ello sería SUM( group_item ) o AVG (group_item ) que devuelven un solo resultado por grupo. La segunda forma soporta dos nivel de anidamiento de funciones grupo, como SUM( AVG ( group_item ) ). En este caso una clausula GROUP BY es obligatoria desde que el valor promedio por grupo es calculado antes de ser sumado por la función SUM.
La tercera forma no es permitida por Oracle.  Considere una expresión que anida tres funciones grupo. Si la función MAX es aplicada a ejemplo previo, la expresión quedaría así MAX(SUM(AVG(group_item))). Las dos funciones grupo internas devuelven un solo valor que representan la suma de un conjunto de valores promedios. La expresión va así MAX(single_value). Una función Grupo no puede ser aplicada a un solo valor.

SELECT NVL(department_id,0) DEPARTMENT_ID,
       MIN(salary) SALARIO_MINIMO,
       MAX(salary) SALARIO_MAXIMO,
       ROUND(AVG(salary),2) SALARIO_PROMEDIO,      
       SUM(salary) SALARIO_TOTAL
FROM employees GROUP BY department_id;

SELECT AVG(SUM(salary))
FROM employees WHERE department_id IN (40,80)
GROUP BY department_id;

SELECT (AVG(SUM(salary)))
FROM employees WHERE  department_id IN (40,80)
GROUP BY department_id;

SELECT department_id, salary
FROM employees WHERE department_id IN (40,80)
ORDER BY department_id;


Comentarios