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
Publicar un comentario