Funciones de suma

Las funciones de suma funcionan en un conjunto de valores para devolver un solo valor a escala. Puede utilizar estas funciones en los métodos select y subselect.

En el ejemplo siguiente se muestra una suma:

SELECT  SUM (e.salary) FROM EmpBean e WHERE e.dept.deptno =20

Esta suma calcula el total del sueldo del departamento 20.

Las funciones de suma son AVG, COUNT, MAX, MIN y SUM. La sintaxis de una función de suma se muestra en el siguiente ejemplo:

aggregation-function  (    [ ALL |  DISTINCT ]  expression )

o:

COUNT( [ ALL |  DISTINCT ] identification-variable )

o:

COUNT( * )

La opción DISTINCT elimina los valores duplicados antes de aplicar la función. ALL es la opción predeterminada y no elimina los duplicados. Los valores nulos se ignoran durante el cálculo de la función de suma excepto para COUNT(*) y COUNT(identification-variable), que devuelven el número de todos los elementos del conjunto.

Si el almacén de datos es Informix, debe limitar el argumento de expresión a una expresión path de valor individual cuando se utiliza la función COUNT o los formatos DISTINCT de las funciones SUM, AVG, MIN y MAX.

Definición del tipo de retorno

Para un método select que utiliza una función de suma, puede definir el tipo de retorno como un tipo primitivo o un tipo wrapper. El tipo de retorno debe ser compatible con el tipo de retorno del almacén de datos. Las funciones MAX y MIN se pueden aplicar a cualquier tipo de datos numérico, de serie o de indicación de fecha y hora, y devuelven el tipo de datos correspondiente. Las funciones SUM y AVG toman como entrada un tipo numérico, y devuelven el mismo tipo numérico que se utiliza en el almacén de datos. La función COUNT acepta cualquier tipo de datos, y devuelve un entero.

Cuando se aplican a un conjunto vacío, las funciones SUM, AVG, MAX y MIN pueden devolver un valor nulo. La función COUNT devuelve cero (0) cuando se aplica a un conjunto vacío. Utilice tipos de wrapper si el valor de retorno puede ser NULL; de lo contrario, el contenedor muestra una excepción ObjectNotFound.

Utilización de GROUP BY y HAVING

El conjunto de valores que se utiliza para la función de suma viene determinado por la agrupación resultante de las cláusulas FROM y WHERE de la consulta. Puede dividir el conjunto en grupos y aplicar la función de suma a cada grupo. Para realizar esta acción, utilice una cláusula GROUP BY en la consulta. La cláusula GROUP BY define la agrupación de miembros, que incluyen una lista de las expresiones path. Cada expresión path especifica un campo con un tipo primitivo de byte, short, int, long, float, double, boolean, char o un tipo de envoltorio (wrapper) de Byte, Short, Integer, Long, Float, Double, BigDecimal, String, Boolean, Character, java.util.Calendar, java.util.Date, java.sql.Date, java.sql.Time o java.sql.Timestamp.

El siguiente ejemplo muestra el uso de la cláusula GROUP BY en una consulta que calcula el sueldo promedio de cada departamento:

SELECT e.dept.deptno,  AVG ( e.salary) FROM EmpBean e GROUP BY e.dept.deptno

Al dividir un conjunto en grupos, se considera un valor NULL igual a otro valore NULL.

Del mismo modo que la cláusula WHERE filtra las duplicaciones (esto es, los registros de los valores de recopilación devueltos) de la cláusula FROM, se pueden filtrar los grupos utilizando una cláusula HAVING que comprueba las propiedades del grupo que requiere funciones de suma o agrupación de miembros:

SELECT e.dept.deptno,  AVG ( e.salary) FROM EmpBean e 
GROUP BY e.dept.deptno
HAVING  COUNT(*) > 3  AND  e.dept.deptno > 5

Esta consulta devuelve el sueldo promedio de los departamentos que tienen más de tres empleados y cuyo número de departamento es mayor que cinco.

Es posible utilizar una cláusula HAVING sin una cláusula GROUP BY, en cuyo caso todo el conjunto se tratará como un solo grupo, al que se aplica la cláusula HAVING.


Icon that indicates the type of topic Concept topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cque_agg
File name: cque_agg.html