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
.
- 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);
sqlSuele 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;
sqlEl 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;
sqlEste 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.
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.