Skip to content

Summary queries

Las consultas de resumen (summary queries) nos permiten obtener información agregada (como totales, promedios, máximos, mínimos, etc.) de los datos almacenados en una base de datos. Estas consultas son útiles para analizar grandes volúmenes de datos y extraer información relevante.

Para realizar consultas de resumen, se utilizan comúnmente las funciones de agregación, que operan sobre un conjunto de filas y devuelven un único valor. Algunas de las funciones de agregación más utilizadas son:

Estas funciones se pueden combinar con cláusulas como GROUP BY y HAVING para obtener resultados más específicos y detallados.

Partiendo de una tabla como esta:

CREATE TABLE empleados (
    id INTEGER PRIMARY KEY,
    nombre TEXT NOT NULL,
    departamento TEXT NOT NULL,
    salario INTEGER NOT NULL
);

CREATE TABLE departamentos (
    id INTEGER PRIMARY KEY,
    nombre TEXT NOT NULL
);

INSERT INTO empleados (id, nombre, departamento, salario) VALUES
(1, 'Juan', 'Ventas', 50000),
(2, 'Ana', 'Marketing', 60000),
(3, 'Luis', 'Ventas', 55000),
(4, 'Marta', 'Recursos Humanos', 70000),
(5, 'Pedro', 'Marketing', 65000);

Y conociendo ya las funciones de agregación, podemos agrupar los datos por departamento y calcular el total de empleados, el salario promedio, el total de salarios, el salario máximo y mínimo por departamento:

SELECT 
    departamento, 
    COUNT(*) AS total_empleados, 
    AVG(salario) AS salario_promedio, 
    SUM(salario) AS total_salarios, 
    MAX(salario) AS salario_maximo, 
    MIN(salario) AS salario_minimo
FROM empleados
GROUP BY departamento

Además, podemos filtrar los resultados utilizando la cláusula HAVING para mostrar solo aquellos departamentos con un salario promedio superior a un valor específico:

SELECT 
    departamento, 
    COUNT(*) AS total_empleados, 
    AVG(salario) AS salario_promedio, 
    SUM(salario) AS total_salarios, 
    MAX(salario) AS salario_maximo, 
    MIN(salario) AS salario_minimo
FROM empleados
GROUP BY departamento
HAVING AVG(salario) > 60000