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 por GROUP BY basándose en una condición.

Sintaxis Básica

SELECT columna1, función_agregada(columna2)
FROM tabla
GROUP BY columna1
HAVING condición;

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:

SELECT producto, SUM(cantidad) AS total_vendido
FROM ventas
GROUP BY producto;

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

SELECT cliente, SUM(total) AS total_pedidos
FROM pedidos
GROUP BY cliente
HAVING SUM(total) > 500;

Resultado esperado:

cliente total_pedidos
Juan 500
Ana 500
Luis 400

Errores Comunes

  • Usar HAVING sin GROUP BY: La cláusula HAVING debe ir acompañada de GROUP BY.
  • Confundir HAVING con WHERE: Recuerda que WHERE se usa para filtrar filas antes de la agregación, mientras que HAVING 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

Módulo 3: Trabajando con múltiples tablas

Módulo 4: Filtrado avanzado de datos

Módulo 5: Manipulación de datos

Módulo 6: Funciones avanzadas de SQL

Módulo 7: Subconsultas y consultas anidadas

Módulo 8: Índices y optimización de rendimiento

Módulo 9: Transacciones y concurrencia

Módulo 10: Temas avanzados

Módulo 11: SQL en la práctica

Módulo 12: Proyecto final

© Copyright 2024. Todos los derechos reservados