SQL HAVING: cómo filtrar resultados con funciones agregadas

SQL HAVING es una condición que puede aplicarse a entradas ya agrupadas. Se usa con funciones agregadas y se utiliza para restringir conjuntos de resultados.

¿Qué es SQL HAVING?

Además del conocido WHERE, existe otra condición en el Structured Query Language que se utiliza con frecuencia. SQL HAVING se añadió para filtrar datos basándose en determinados criterios. La condición se aplica con el comando SQL SELECT y la instrucción SQL GROUP BY. Mientras que esta última agrupa los resultados, SQL HAVING restringe este conjunto de resultados utilizando diferentes funciones agregadas. La condición fue introducida porque WHERE no puede interactuar con funciones agregadas como SQL AVG(), SQL COUNT(), MAX(), MIN() y SUM(). SQL HAVING se utiliza después de las sentencias WHERE (si está disponible) y GROUP BY, pero antes de ORDER BY.

Servidores virtuales VPS
Virtualización completa con acceso root
  • Ancho de banda de hasta 1 Gb/s y tráfico ilimitado
  • Almacenamiento SSD NVMe ultrarrápido
  • Incluye: edición Plesk Web Host

Sintaxis y funcionalidad

Para comprender la funcionalidad y las ventajas de SQL HAVING, merece la pena echar un vistazo a la sintaxis de la cláusula:

SELECT nombre_de_columna(s) 
FROM nombre_de_tabla 
WHERE condición 
GROUP BY nombre_de_columna(s) 
HAVING condición 
ORDER BY nombre_de_columna(s);
sql

Suele aplicarse una función de agregación a una o varias columnas. A continuación, se especifica el nombre de la tabla para localizar los datos. La condición WHERE es opcional. GROUP BY agrupa valores idénticos, que se pueden filtrar con más precisión usando HAVING y ordenar en la secuencia deseada con ORDER BY.

Ejemplo de la condición

La forma más fácil de ilustrar SQL HAVING es con la ayuda de un ejemplo sencillo. Para ello, crearemos una pequeña tabla llamada “Lista de clientes”. Ésta contiene las columnas “Número de cliente”, “Nombre”, “Ubicación” y “Artículo”:

Número de cliente Nombre Ubicación Artículo
1427 Pérez Madrid 13
1377 Martín Barcelona 9
1212 Hernández Barcelona 15
1431 Rodríguez Sevilla 22
1118 García Valencia 10

Utilizaremos SQL HAVING para averiguar cuántos clientes de Barcelona han pedido diez o más artículos. Para ello, utilizamos el siguiente código y especificamos el número utilizando un SQL Aliases.

SELECT Ubicación, COUNT(Ubicación) AS CantidadPedidos 
FROM Lista_de_clientes 
WHERE Ubicación = 'Barcelona' 
GROUP BY Ubicación, Artículo 
HAVING Artículo > 10;
sql

El resultado sería el siguiente:

Ubicación CantidadPedidos
Barcelona 1

La condición en combinación con INNER JOIN

También puedes combinar SQL HAVING con INNER JOIN. Para ello, creamos una segunda tabla llamada “Artículo_01”, que almacena cuántas veces y cuándo se ha pedido un artículo concreto. Contiene un número de pedido, un número de cliente, la cantidad y una fecha de pedido:

Número de pedido Número de cliente Cantidad Fecha
00283 1427 4 2024-01-15
00284 1211 7 2024-01-19
00285 1275 15 2024-01-29
00286 1431 10 2024-02-01
00287 1427 9 2024-02-05

Ahora podemos indicar al sistema que nos muestre todos los clientes que han realizado más de un pedido:

SELECT Lista_de_clientes.Nombre, COUNT(Artículo_01.Número_de_pedido) AS CantidadPedidos 
FROM (Artículo_01 
INNER JOIN Lista_de_clientes ON Artículo_01.Número_de_cliente = Lista_de_clientes.Número_de_cliente) 
GROUP BY Nombre 
HAVING COUNT(Artículo_01.Número_de_pedido) > 1;
sql

Este es el resultado que obtenemos:

Nombre Cantidad de pedidos
Pérez 2

Alternativas a SQL HAVING

Una alternativa a SQL HAVING es WHERE. Sin embargo, no se utilizan exactamente de la misma manera. WHERE se utiliza para entradas individuales y también puede combinarse con DELETE o UPDATE además de SELECT. HAVING, en cambio, solo se utiliza para entradas grupadas y solo es compatible con SELECT. WHERE se utiliza antes de GROUP BY y HAVING después. Además, solo SQL HAVING puede trabajar con funciones agregadas.

Consejo

Consigue un servidor que se adapta a tus necesidades: con el Hosting SQL Server de IONOS, puedes elegir entre MSSQL, MySQL y MariaDB y beneficiarte de una sólida arquitectura de seguridad, un rendimiento excepcional y un asesoramiento personalizado en todo momento.

¿Le ha resultado útil este artículo?
Page top