Ir al contenido principal
Documentos
FuncionesExpresionesKeywordsDeclaracionesCláusulas

Cláusula HAVING de MySQL

La cláusula `HAVING` de MySQL se utiliza para filtrar registros que trabajan sobre datos agregados devueltos por `GROUP BY`. Te permite especificar las condiciones que determinan qué resultados de grupo se incluyen en la salida.

Utilización

La cláusula `HAVING` se aplica después de `GROUP BY` para filtrar datos basados en funciones agregadas como `SUM`, `COUNT` o `AVG`. A diferencia de la cláusula `WHERE`, que no puede operar sobre datos agregados y se utiliza para filtrar a nivel de fila, `HAVING` está específicamente diseñada para condiciones basadas en agregados.

SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1
HAVING condition;

En esta sintaxis, `Condición de agrupación` especifica la condición basada en la agrupación para filtrar los resultados agrupados.

Nota: En el orden de ejecución de las cláusulas SQL, `HAVING` se procesa después de `GROUP BY` y antes de `ORDER BY`.

Ejemplos

1. Uso básico de HAVING

SELECT department, COUNT(employee_id) AS num_employees
FROM employees
GROUP BY department
HAVING num_employees > 5;

Este ejemplo recupera los departamentos con más de cinco empleados utilizando `HAVING` para filtrar el resultado agregado.

2. Utilizar HAVING con SUM

SELECT customer_id, SUM(order_total) AS total_spent
FROM orders
GROUP BY customer_id
HAVING total_spent > 1000;

Aquí, la cláusula `HAVING` filtra a los clientes que han gastado más de 1000 $ en total.

3. Condiciones múltiples en HAVING

SELECT product_category, AVG(price) AS avg_price
FROM products
GROUP BY product_category
HAVING avg_price BETWEEN 100 AND 500 AND COUNT(product_id) > 10;

Este ejemplo utiliza varias condiciones en `HAVING` para encontrar categorías de productos con un precio medio entre 100 y 500 $ y más de diez productos.

4. Utilizar HAVING con ORDER BY

SELECT department, COUNT(employee_id) AS num_employees
FROM employees
GROUP BY department
HAVING num_employees > 5
ORDER BY num_employees DESC;

Este ejemplo demuestra el uso de `ORDENAR POR` con `HAVING`, ordenando los resultados de los departamentos con más de cinco empleados en orden descendente por el número de empleados.

Consejos y buenas prácticas

  • Utiliza `HAVING` para el filtrado agregado. Aplica `HAVING` al filtrar resultados basados en datos agregados, no para filtrar a nivel de fila.
  • Combínalo con `GRUPO POR`. Utiliza siempre `HAVING` con `GROUP BY` porque `HAVING` opera sobre datos agrupados.
  • Optimiza con índices. Garantiza una ejecución eficaz de la consulta utilizando índices en las columnas implicadas en `GROUP BY`.
  • Limita las condiciones complejas. Simplifica las condiciones de `HAVING` para mantener el rendimiento y la legibilidad.

Perfeccionamiento de SQL para principiantes

Adquiere los conocimientos de SQL para interactuar con tus datos y consultarlos.
Empieza a aprender gratis