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 Santos Nueva York 13
1377 Johnson Los Ángeles 9
1212 Brown Los Ángeles 15
1431 Davis Chicago 22
1118 Martínez Nueva York 10

Utilizaremos SQL HAVING para averiguar cuántos clientes de Los Ángeles 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 = 'Los Ángeles'  
GROUP BY Ubicación, Artículo  
HAVING Artículo > 10;
sql

El resultado sería el siguiente:

Ubicación CantidadPedidos
Los Ángeles 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-15-01
00284 1211 7 2024-19-01
00285 1275 15 2024-29-01
00286 1431 10 2024-01-02
00287 1427 9 2024-05-02

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
Santos 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?
Utilizamos cookies propias y de terceros para mejorar nuestros servicios y mostrarle publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continua navegando, consideramos que acepta su uso. Puede obtener más información, o bien conocer cómo cambiar la configuración de su navegador en nuestra. Política de Cookies.
Page top