Introducción
La cláusula HAVING
en SQL se utiliza para filtrar los resultados de una consulta después de que se hayan aplicado las funciones de agregación (SUM
, COUNT
, AVG
, MAX
, MIN
). Es similar a la cláusula WHERE
, pero WHERE
no puede ser utilizada con funciones de agregación. HAVING
permite especificar condiciones que deben cumplir los grupos de resultados.
Conceptos Clave
- Funciones de Agregación: Operaciones que resumen datos, como
SUM
,COUNT
,AVG
,MAX
,MIN
. - Cláusula
GROUP BY
: Agrupa filas que tienen los mismos valores en columnas especificadas en grupos. - Cláusula
HAVING
: Filtra los grupos de resultados creados porGROUP BY
basándose en una condición.
Sintaxis Básica
Ejemplo Práctico
Supongamos que tenemos una tabla ventas
con las siguientes columnas:
id_venta | producto | cantidad | precio |
---|---|---|---|
1 | A | 10 | 100 |
2 | B | 5 | 200 |
3 | A | 7 | 100 |
4 | B | 3 | 200 |
5 | C | 8 | 150 |
Queremos encontrar los productos que han vendido más de 10 unidades en total.
Paso 1: Usar GROUP BY
y una función de agregación
Primero, agrupamos los productos y sumamos las cantidades vendidas:
Esto nos dará el siguiente resultado:
producto | total_vendido |
---|---|
A | 17 |
B | 8 |
C | 8 |
Paso 2: Aplicar la cláusula HAVING
Ahora, filtramos los resultados para mostrar solo los productos que han vendido más de 10 unidades:
SELECT producto, SUM(cantidad) AS total_vendido FROM ventas GROUP BY producto HAVING SUM(cantidad) > 10;
El resultado será:
producto | total_vendido |
---|---|
A | 17 |
Ejercicios Prácticos
Ejercicio 1
Dada la siguiente tabla empleados
:
id_empleado | departamento | salario |
---|---|---|
1 | Ventas | 5000 |
2 | Ventas | 6000 |
3 | IT | 7000 |
4 | IT | 8000 |
5 | HR | 4000 |
Encuentra los departamentos con un salario promedio mayor a 6000.
Solución
SELECT departamento, AVG(salario) AS salario_promedio FROM empleados GROUP BY departamento HAVING AVG(salario) > 6000;
Resultado esperado:
departamento | salario_promedio |
---|---|
IT | 7500 |
Ejercicio 2
Dada la tabla pedidos
:
id_pedido | cliente | total |
---|---|---|
1 | Juan | 300 |
2 | Ana | 150 |
3 | Juan | 200 |
4 | Ana | 350 |
5 | Luis | 400 |
Encuentra los clientes que han realizado pedidos por un total mayor a 500.
Solución
Resultado esperado:
cliente | total_pedidos |
---|---|
Juan | 500 |
Ana | 500 |
Luis | 400 |
Errores Comunes
- Usar
HAVING
sinGROUP BY
: La cláusulaHAVING
debe ir acompañada deGROUP BY
. - Confundir
HAVING
conWHERE
: Recuerda queWHERE
se usa para filtrar filas antes de la agregación, mientras queHAVING
se usa para filtrar grupos después de la agregación.
Conclusión
La cláusula HAVING
es una herramienta poderosa para filtrar resultados después de aplicar funciones de agregación. Es especialmente útil cuando necesitas condiciones basadas en los resultados de estas funciones. Asegúrate de entender la diferencia entre WHERE
y HAVING
para utilizar cada una en el contexto adecuado.
En el próximo módulo, profundizaremos en la manipulación de datos con las instrucciones INSERT
, UPDATE
, DELETE
y UPSERT
.
Curso de SQL
Módulo 1: Introducción a SQL
Módulo 2: Consultas básicas de SQL
- Instrucción SELECT
- Filtrando datos con WHERE
- Ordenando datos con ORDER BY
- Limitando resultados con LIMIT
Módulo 3: Trabajando con múltiples tablas
Módulo 4: Filtrado avanzado de datos
- Usando LIKE para coincidencia de patrones
- Operadores IN y BETWEEN
- Valores NULL y IS NULL
- Agregando datos con GROUP BY
- Cláusula HAVING
Módulo 5: Manipulación de datos
Módulo 6: Funciones avanzadas de SQL
Módulo 7: Subconsultas y consultas anidadas
- Introducción a subconsultas
- Subconsultas correlacionadas
- EXISTS y NOT EXISTS
- Usando subconsultas en cláusulas SELECT, FROM y WHERE
Módulo 8: Índices y optimización de rendimiento
- Entendiendo los índices
- Creación y gestión de índices
- Técnicas de optimización de consultas
- Análisis del rendimiento de consultas
Módulo 9: Transacciones y concurrencia
- Introducción a las transacciones
- Propiedades ACID
- Instrucciones de control de transacciones
- Manejo de concurrencia