...

GROUP BY y Funciones de Agregación: Agrupa y analiza tus datos en SQL

En SQL, muchas veces no solo queremos consultar datos individuales, sino también resumir información.
Por ejemplo:

  • Contar cuántos empleados hay por departamento.
  • Calcular el salario promedio de cada área.
  • Obtener el total de ventas por mes.

Para lograr esto, SQL nos ofrece dos herramientas esenciales:

  • Funciones de agregación como COUNT, SUM, AVG, MAX y MIN.
  • La cláusula GROUP BY, que permite agrupar registros según un criterio.

En este artículo aprenderás:

  • Cómo usar cada función de agregación.
  • Cómo combinar estas funciones con GROUP BY.
  • Buenas prácticas para optimizar tus consultas.
  • Ejemplos listos para ejecutar en db-fiddle.com.

Funciones de agregación en SQL

Las funciones de agregación trabajan sobre conjuntos de datos y devuelven un solo valor por grupo.

FunciónDescripciónEjemplo
COUNT()Cuenta registrosCOUNT(*)
SUM()Suma valores numéricosSUM(salario)
AVG()Calcula el promedioAVG(salario)
MAX()Encuentra el valor máximoMAX(salario)
MIN()Encuentra el valor mínimoMIN(salario)

Preparando el escenario: tablas y datos

Trabajaremos con dos tablas: empleados y departamentos.

CREATE TABLE departamentos (
    id_departamento INTEGER PRIMARY KEY,
    nombre_departamento TEXT NOT NULL
);

CREATE TABLE empleados (
    id_empleado INTEGER PRIMARY KEY,
    nombre TEXT NOT NULL,
    salario DECIMAL(10,2) NOT NULL,
    id_departamento INTEGER
);

Datos ficticios:

INSERT INTO departamentos (id_departamento, nombre_departamento) VALUES
(1, 'Recursos Humanos'),
(2, 'Ventas'),
(3, 'Tecnología');

INSERT INTO empleados (id_empleado, nombre, salario, id_departamento) VALUES
(1, 'Ana Torres', 75000, 1),
(2, 'Luis Pérez', 90000, 2),
(3, 'Carlos López', 60000, 3),
(4, 'Marta Díaz', 72000, 2),
(5, 'Pedro García', 58000, 3),
(6, 'Sofía Ruiz', 88000, 2);

Estos datos estarán disponibles para practicar en db-fiddle.com.


Uso básico de GROUP BY

La sintaxis general es:

SELECT columna_agrupada, función_agregación
FROM tabla
GROUP BY columna_agrupada;

💡 Nota: todas las columnas en el SELECT que no estén dentro de una función de agregación deben aparecer en el GROUP BY.


Ejemplo: contar empleados por departamento

Queremos saber cuántos empleados tiene cada departamento.

SELECT d.nombre_departamento, COUNT(e.id_empleado) AS total_empleados
FROM empleados AS e
INNER JOIN departamentos AS d
  ON e.id_departamento = d.id_departamento
GROUP BY d.nombre_departamento;

Resultado:

nombre_departamentototal_empleados
Recursos Humanos1
Ventas3
Tecnología2

Uso de otras funciones de agregación

SUM: suma de salarios por departamento

SELECT d.nombre_departamento, SUM(e.salario) AS total_salarios
FROM empleados AS e
INNER JOIN departamentos AS d
  ON e.id_departamento = d.id_departamento
GROUP BY d.nombre_departamento;
nombre_departamentototal_salarios
Recursos Humanos75000
Ventas250000
Tecnología118000

AVG: salario promedio por departamento

SELECT d.nombre_departamento, AVG(e.salario) AS promedio_salarios
FROM empleados AS e
INNER JOIN departamentos AS d
  ON e.id_departamento = d.id_departamento
GROUP BY d.nombre_departamento;
nombre_departamentopromedio_salarios
Recursos Humanos75000
Ventas83333.33
Tecnología59000

MAX y MIN: salarios extremos por departamento

SELECT d.nombre_departamento,
       MAX(e.salario) AS salario_mas_alto,
       MIN(e.salario) AS salario_mas_bajo
FROM empleados AS e
INNER JOIN departamentos AS d
  ON e.id_departamento = d.id_departamento
GROUP BY d.nombre_departamento;
nombre_departamentosalario_mas_altosalario_mas_bajo
Recursos Humanos7500075000
Ventas9000072000
Tecnología6000058000

Combinar GROUP BY con WHERE

Puedes usar WHERE para filtrar antes de agrupar.

Ejemplo: empleados con salario mayor a 60,000 agrupados por departamento.

SELECT d.nombre_departamento, COUNT(e.id_empleado) AS total
FROM empleados AS e
INNER JOIN departamentos AS d
  ON e.id_departamento = d.id_departamento
WHERE e.salario > 60000
GROUP BY d.nombre_departamento;

Diferencias entre motores SQL

Motor SQLComportamiento
SQL ServerSoporta todas las funciones de agregación y GROUP BY estándar.
MySQLIgual que SQL Server. GROUP BY requiere columnas explícitas.
PostgreSQLSoporte completo y optimización avanzada para agregaciones.
SQLiteSoporte completo, ideal para prácticas y proyectos ligeros.

Buenas prácticas

  1. Siempre incluir las columnas agrupadas en el GROUP BY.
  2. Usa alias descriptivos para columnas calculadas (total_empleados, promedio_salarios).
  3. Filtra primero con WHERE para mejorar rendimiento antes de agrupar.
  4. Evita SELECT * en consultas con agregaciones.
  5. Prueba tus consultas en plataformas como db-fiddle.com.

Conclusión

El uso de GROUP BY junto con funciones de agregación es fundamental para analizar y resumir datos en SQL.
Desde contar registros hasta calcular promedios y totales, estas herramientas te permiten crear reportes útiles y precisos.

Comienza a practicar los ejemplos de este artículo en db-fiddle.com y lleva tus habilidades de SQL al siguiente nivel.

Deja un comentario

Seraphinite AcceleratorOptimized by Seraphinite Accelerator
Turns on site high speed to be attractive for people and search engines.