funciones-agregadas-sql

Funciones agregadas en SQL COUNT, SUM, AVG, MIN y MAX

  • 4 min

Ya hemos visto cómo agrupar filas con GROUP BY. Pero esos grupos son inútiles si no calculamos algo con ellos.

En serio, piénsalo por un momento. Realmente, un grupo no sirve de nada si no puedes hacer un “Contar”, o “Sumar” o “Exists”… o lo que sea.

Aquí es donde entran las Funciones Agregadas. Una función agregada toma una colección de valores y realiza un cálculo para devolver un único valor.

Son las operaciones matemáticas fundamentales de cualquier reporte o análisis de datos. Vamos a ver las cinco “magníficas” que usarás en el 99% de tus consultas.

Contar con COUNT

Su objetivo es contar elementos. Es la función más básica, pero tiene dos “sabores” que a menudo confunden.

  • COUNT(*): Cuenta filas. Le da igual lo que haya dentro, cuenta cuántos registros hay en total. Incluye los nulos.
  • COUNT(Columna): Cuenta valores. Evalúa la columna y cuenta cuántos datos hay. Ignora los NULL.
-- Imaginad una tabla 'Empleados' con 10 filas.
-- 2 empleados no tienen email (Email es NULL).

SELECT 
    COUNT(*) AS TotalFilas,        -- Devuelve 10
    COUNT(Email) AS TotalEmails    -- Devuelve 8
FROM Empleados;
Copied!

Si solo quieres saber “¿cuántos registros hay?”, usa siempre COUNT(*).

A veces se dice que no se use porque es más lenta. Falso, está altamente optimizado por el motor de SQL Server.

Sumar con SUM

Como su nombre indica, suma todos los valores de una columna numérica.

SELECT SUM(Precio) AS TotalIngresos
FROM Ventas;
Copied!

Comportamiento con NULL: SUM ignora los valores nulos. Si sumas 10 + NULL + 20, el resultado es 30 (no NULL, como pasaría en una suma aritmética simple 10 + NULL).

Si todos los valores son NULL, devuelve NULL.

Promedio con AVG

Calcula la media aritmética (suma dividida por la cantidad).

SELECT AVG(Salario) AS SalarioMedio
FROM Empleados;
Copied!

Mínimo y Máximo con MIN y MAX

Estas funciones devuelven el valor más bajo y más alto de un conjunto, respectivamente.

SELECT 
    MIN(Precio) AS ProductoMasBarato,
    MAX(FechaRegistro) AS UltimoUsuarioRegistrado,
    MIN(Apellido) AS PrimerApellidoAlfabetico
FROM Datos;
Copied!

Lo genial es que no solo funcionan con números.

  • Números: El menor/mayor valor matemático.
  • Fechas: La fecha más antigua (MIN) o la más futura (MAX).
  • Texto: El primero (MIN) o el último (MAX) en orden alfabético.

Agregaciones con DISTINCT

A veces no queremos contar todo, sino contar cosas únicas. Todas las funciones agregadas aceptan el modificador DISTINCT dentro de sus paréntesis.

El caso de uso más común es con COUNT.

-- ¿Cuántas ventas hemos hecho?
SELECT COUNT(VentaID) FROM Ventas; -- Ej: 100 ventas

-- ¿Cuántos clientes DIFERENTES nos han comprado?
SELECT COUNT(DISTINCT ClienteID) FROM Ventas; -- Ej: 45 clientes
Copied!

Manejo de Nulos

Es vital recordar cómo se comporta cada una frente a ese gran enemigo que es el NULL.

FunciónComportamiento con NULL
COUNT(*)Los cuenta (Cuenta la fila)
COUNT(Col)Los ignora
SUM(Col)Los ignora
AVG(Col)Los ignora (No cuentan ni en el numerador ni en el denominador)
MIN/MAXLos ignora

Ejemplo combinado

Para cerrar, veamos una consulta típica de un Dashboard que usa todo lo aprendido:

SELECT 
    Categoria,
    COUNT(*) AS TotalProductos,
    SUM(Stock) AS InventarioTotal,
    MAX(Precio) AS PrecioMasAlto,
    AVG(CAST(Precio AS DECIMAL(10,2))) AS PrecioPromedio
FROM Productos
GROUP BY Categoria;
Copied!