Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

SQL para ciencia de datos, Unidad 3 — Agregaciones y estadística básica, 3.3 — HAVING y filtros sobre agregados ·

Diferencia entre WHERE y HAVING

Diferencia entre WHERE y HAVING

Introducción

En la ciencia de datos, SQL es una herramienta esencial para manipular y analizar grandes volúmenes de datos estructurados. Dos cláusulas que a menudo confunden a los programadores son WHERE e HAVING. Ambas permiten filtrar registros en consultas SQL, pero tienen usos y funcionalidades distintos.

Explicación principal

Cláusula WHERE

La cláusula WHERE se utiliza para filtrar filas en una tabla basándose en condiciones. Se aplica a todas las columnas de la consulta después del FROM. Es decir, antes de que cualquier operación de agrupación (como GROUP BY) o agregación (como COUNT, SUM, AVG y otros) se realicen.

Cláusula HAVING

La cláusula HAVING es similar a WHERE, pero se utiliza después del GROUP BY. Se aplica a las columnas resultantes de la operación de agrupación. En otras palabras, filtra los resultados de una consulta basados en un valor agregado.

Ejemplo

Imaginemos que tenemos una tabla llamada pedidos con los siguientes datos:

+----+----------+-------+
| ID | Cliente  | Cantidad |
+----+----------+-------+
| 1  | Ana      | 50     |
| 2  | Juan     | 30     |
| 3  | Ana      | 70     |
| 4  | Carlos   | 60     |
| 5  | Ana      | 80     |
+----+----------+-------+

Ejemplo de uso de WHERE

Si queremos encontrar los clientes que han hecho pedidos superiores a 100:

SELECT Cliente FROM pedidos WHERE Cantidad > 100;

Los resultados serían Ana y Carlos.

Ejemplo de uso de HAVING

Si agrupamos las cantidades por cliente e incluimos una condición de filtrado en la columna resultante después del GROUP BY, usamos HAVING. Por ejemplo, queremos encontrar los clientes con un total de pedidos superiores a 150:

SELECT Cliente, SUM(Cantidad) AS TotalPedidos FROM pedidos GROUP BY Cliente HAVING SUM(Cantidad) > 150;

Los resultados serían Ana y Carlos, ya que Ana ha hecho una cantidad total de 200 (70 + 50 + 80) y Carlos ha hecho 60.

Errores típicos / trampas

  1. Usar WHERE en lugar de HAVING: Confundir la funcionalidad de WHERE con HAVING. Por ejemplo, intentar filtrar después del agrupamiento usando WHERE.
   -- Error
   SELECT Cliente FROM pedidos GROUP BY Cliente WHERE SUM(Cantidad) > 150;
  1. Omitir la columna agregada en HAVING: No incluir la columna resultante de la operación de agrupación.
   -- Error
   SELECT Cliente, SUM(Cantidad) AS TotalPedidos FROM pedidos GROUP BY Cliente HAVING SUM > 150;
  1. Usar funciones no soportadas en WHERE: Algunas funciones solo son válidas después del GROUP BY (como COUNT, SUM o AVG).
   -- Error
   SELECT Cliente FROM pedidos WHERE COUNT(*) > 2 GROUP BY Cliente;

Checklist accionable

  1. Revisa la gramática SQL: Asegúrate de entender las diferencias entre WHERE y HAVING.
  2. Prueba tus consultas: Utiliza bases de datos de ejemplo para probar cómo funcionan WHERE e HAVING.
  3. Documenta tu consulta: Agrega comentarios a tus consultas SQL para explicar la lógica.
  4. Verifica los resultados: Comprueba que los resultados de tus consultas coinciden con lo esperado, especialmente después del uso de GROUP BY y HAVING.
  5. Asegúrate de usar las cláusulas correctas en función de tu propósito: Usa WHERE para filtrar antes del agrupamiento y HAVING para filtrar después.

Siguientes pasos

  • Aprende más sobre SQL: Explora otros aspectos avanzados de SQL, como subconsultas y CTEs.
  • Practica con datos reales: Aplica tus conocimientos a datasets reales para mejorar tus habilidades.
  • Explora el análisis de datos con Python: Integra tus conocimientos SQL con Pandas o otras bibliotecas de análisis de datos.

Siguiendo estos pasos, podrás utilizar WHERE e HAVING de manera efectiva en tus consultas SQL y optimizar tu análisis de datos.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).