Usar funciones de grupo

Informar datos agregados mediante funciones de grupo

SQL tiene muchas funciones agregadas predefinidas que puede usar para escribir consultas para obtener ese tipo de información. La cláusula GROUP BY define cómo agrupar filas de la tabla de datos al agregar información, y la cláusula HAVING filtra las filas que no pertenecen a los grupos especificados.

Las funciones de agregación realizan muchas cosas, como contar todas las filas de una tabla, promediar los datos de las columnas y sumar datos numéricos. Los agregados también pueden buscar en la tabla para encontrar el valor máximo «MAX» o el valor mínimo «MIN» en una columna. Al igual que con otros tipos de consultas, puede limitar o filtrar las filas con las que trabajan estas funciones mediante la cláusula WHERE. Por ejemplo, si un gerente necesita saber cuántos empleados trabajan en una organización, la función agregada COUNT

SELECT COUNT(*)
FROM employees;

  COUNT(*)
----------
        24

se puede utilizar para obtener esta información.

La función que se muestra en la instrucción SELECT a continuación cuenta todas las filas de la tabla.

SUM( [ALL | DISTINCT] expression )

AVG( [ALL | DISTINCT] expression )

COUNT( [ALL | DISTINCT] expression )

COUNT(*)

MAX(expression)

MIN(expression)

Tabla de resultados de COUNT

una función es una sola columna de una fila conocida como resultado o valor escalar. Tenga en cuenta que la tabla de resultados tiene un encabezado de columna que coincide con el nombre de la función agregada especificada en la cláusula SELECT.

  • Algunas de las funciones agregadas comúnmente utilizadas se enumeran a continuación:

  • Las palabras clave ALL y DISTINCT son opcionales y funcionan de la misma manera que con las cláusulas SELECT que aprendió a escribir. La palabra clave ALL es la predeterminada cuando la opción está habilitada. La expresión especificada en la sintaxis puede ser una constante, una función o cualquier combinación de nombres de columna, constantes y funciones asociadas con operadores aritméticos. Sin embargo, las funciones agregadas se usan más comúnmente con un nombre de columna. A excepción de la función COUNT, todas las funciones agregadas reconocen nulos.

Al usar agregados, debe comprender y seguir dos reglas:

Las funciones agregadas se pueden usar tanto en cláusulas SELECT como en cláusulas HAVING (la cláusula HAVING se analiza más adelante en este capítulo).

SELECT COUNT(*) Count
FROM employees;

COUNT
-----
   24

Las funciones agregadas no se pueden utilizar en una cláusula WHERE. Violarlo causará que la función de grupo Oracle ORA-00934 no esté permitida aquí mensaje de error.

SELECT AVG(Salary) average_sal
FROM employees;

AVERAGE_SAL
-----------
      15694

Ilustraciones

SELECT SUM(Salary) total_sal
FROM employees;

TOTAL_SAL
---------
    87472

La consulta SELECT a continuación cuenta el número de empleados en una organización.

SELECT MIN (hire_date) oldest, MAX (hire_date) latest
FROM employees;

OLDEST		LATEST
---------	-----------
16-JAN-83	01-JUL-2012

La consulta SELECT a continuación devuelve el salario promedio de los empleados en una organización.

La siguiente consulta SELECT devuelve la suma de los salarios de los empleados de una organización.

La siguiente consulta SELECT devuelve las fechas de contratación más antiguas y más recientes para los empleados de una organización.

AGRUPAR POR

Las funciones agregadas se usan comúnmente junto con la cláusula GROUP BY. La cláusula GROUP BY le permite utilizar funciones agregadas para responder preguntas de gestión más complejas, como:

¿Cuál es el salario medio de los empleados de cada departamento?

¿Cuántos empleados trabajan en cada departamento?

¿Cuántos empleados están trabajando en un proyecto específico?

SELECT	DEPARTMENT_ID, SUM(SALARY)
FROM employees;

DEPARTMENT_ID,
*
ERROR at line 2:
ORA-00937: not a single-group group function

Agrupar por función crea grupos de datos basados ​​en columnas y agrega información solo dentro del grupo. El criterio de agrupación está determinado por las columnas especificadas en la cláusula GROUP BY. Siguiendo esta jerarquía, los datos se ordenan primero en grupos y luego la cláusula WHERE delimita las filas de cada grupo.

Recomendaciones para usar la cláusula GROUP BY

(1) Todas las columnas dependientes o columnas utilizadas en la función GROUP BY deben formar la base de la agrupación, por lo tanto, también deben incluirse en la cláusula GROUP BY.

(2) La cláusula GROUP BY no admite el uso de un alias de columna, pero admite nombres reales.

SELECT  DEPARTMENT_ID,  COUNT (*)
FROM employees
GROUP BY DEPARTMENT_ID;

(3) La cláusula GROUP BY solo se puede utilizar con funciones agregadas como SUM, AVG, COUNT, MAX y MIN. Si se utiliza con funciones de una sola línea, Oracle lanza una excepción como «ORA-00979: no expresión GROUP BY». …

SELECT DEPARTMENT_ID, JOB_ID, SUM (SAL)
FROM employees
GROUP BY DEPARTMENT_ID, JOB_ID;

(4) Las funciones agregadas no se pueden utilizar en la cláusula GROUP BY. Oracle devolverá el mensaje de error «ORA-00934: función de grupo no permitida» aquí.

SELECT SUM (SALARY)
FROM employees
GROUP BY DEPARTMENT_ID, JOB_ID;

La solicitud a continuación indica el número de empleados que trabajan en cada departamento.

Del mismo modo, la consulta se encuentra a continuación para encontrar la suma del salario para los respectivos ID de trabajo en cada departamento. Tenga en cuenta que el grupo se crea según el ID y el título del departamento. Por tanto, aparecen en la cláusula GROUP BY.

La siguiente consulta también da el mismo resultado. Tenga en cuenta que la agrupación se basa en las columnas de ID de trabajo y departamento, pero no se utiliza para la visualización.

Usando DISTINCT, TODAS las palabras clave con funciones agregadas

Cuando especifica la palabra clave DISTINCT como parámetro de entrada, la agrupación por función solo considera el valor único de la columna que se agregará. Si especifica la palabra clave ALL como parámetro de entrada, la agrupación por función tiene en cuenta todos los valores de columna para la agregación, incluidos los ceros y los duplicados. TODO es la especificación predeterminada.

TENIENDO cláusula

La cláusula HAVING se usa para funciones agregadas de la misma manera que la cláusula WHERE se usa para nombres y expresiones de columna. Básicamente, las cláusulas HAVING y WHERE hacen lo mismo, es decir, filtran filas para que no se incluyan en la tabla de resultados según una condición. Si bien la cláusula HAVING puede parecer que filtra grupos, no lo es. Más bien, la cláusula HAVING filtra filas.

SELECT JOB_ID,	SUM (SALARY)
FROM employees
GROUP BY JOB_ID
HAVING SUM (SALARY) > 10000;

Cuando se eliminan todas las filas de un grupo, el grupo también se elimina. En resumen, las diferencias importantes entre las cláusulas WHERE y HAVING son las siguientes:

SELECT department_id, AVG(Salary)
FROM employees
HAVING AVG(Salary) > 33000;
ERROR at line 1:  ORA-00937: not a single-group group function 

La cláusula WHERE se usa para filtrar filas ANTES de una acción GROUPING (es decir, antes de evaluar funciones agregadas). La cláusula HAVING filtra filas DESPUÉS de la acción GROUPING (es decir, después de evaluar las funciones agregadas). La cláusula HAVING es un parámetro condicional que está directamente relacionado con el parámetro de la cláusula GROUP BY, porque la cláusula HAVING elimina filas de la tabla de resultados según el resultado de la cláusula GROUP BY.

🚫