martes, 26 de abril de 2011

Agregación

Las funciones de agrupación operan sobre conjuntos de filas para dar un resultado por grupo. Así tenemos para atributos numéricos
  • AVG: da un amedia
  • SUM: suma los valores
  • MIN: calcula el valor mínimo
  • MAX: calcula el valor máximo
Las funciones de agrupación ignoran los valores NULL en las consultas, aunque se puede utilizar NVL (en Oracle) para forzar a que considere a NULL como un valor determinado.

SELECT AVG(NVL(sueldo,0)) FROM empleado
Calcula el sueldo medio de los empleados, considerando 0 los valores que sean NULL

Mediante la cláusula GROUP BY se dividen las filas que devuelve una consulta en pequeños grupos. Cuando lo utilicemos hay que tener en cuenta que todas las columnas que pongamos en el SELECT que no estén en el GROUP BY, han de estar en una función de agrupación.

Así es correcto
SELECT departamento, AVG(sueldo) FROM empleados GROUP BY departamento

Así no es correcto
SELECT departamento, sueldo FROM empleados GROUP BY departamento

Tiene sentido ya que si agrupamos los empleados por departamente ¿el sueldo de cual nos devolvería?
Eso sí, la columna que pongamos en el GROUP BY no ha de estar en el SELECT y podemos utilizar más de una columna. Con GROUP BY no se utiliza WHERE, sino HAVING, que sirve para seleccionar grupos.

SELECT departamento, MAX(sueldo) FROM empleados GROUP BY departamento HAVING MAX(sueldo) > 2000
En este nos selecciona el sueldo máximo agrupado por departamento, siempre y cuando el sueldo sea mayor que 2000

No hay comentarios:

Publicar un comentario