Ir al contenido principal
Documentos
Funciones de cadenaDesencadenaBases de datosFunciones JSONFunciones matemáticasFunciones de fechaÍndicesSintaxis básicaGestión de Tablas y Esquemas

PostgreSQL HAVING

La cláusula HAVING en PostgreSQL se utiliza para filtrar los registros que trabajan con funciones de agregación. Te permite especificar condiciones en los grupos creados por la cláusula GROUP BY.

Utilización

La cláusula HAVING se emplea cuando necesitas filtrar grupos de datos junto con funciones agregadas como SUM, COUNT o AVG. Va después de la cláusula GROUP BY y antes de ORDER BY si se utiliza.

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

En esta sintaxis, HAVING condition filtra los resultados devueltos por la cláusula GROUP BY basándose en los resultados de la función agregada. Mientras que WHERE filtra las filas antes de la agregación, HAVING aplica las condiciones después de la agregación.

Ejemplos

1. Filtro de grupo básico

SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) > 10;

Esta consulta lista los departamentos con más de 10 empleados filtrando los grupos creados por la cláusula GROUP BY.

2. Utilizar SUMA con HAVING

SELECT product_id, SUM(quantity)
FROM sales
GROUP BY product_id
HAVING SUM(quantity) > 100;

Aquí, la consulta recupera los productos que han vendido más de 100 unidades filtrando en función de la suma de cantidades.

3. Condición compleja con múltiples agregados

SELECT manager_id, COUNT(employee_id), AVG(salary)
FROM employees
GROUP BY manager_id
HAVING COUNT(employee_id) > 5 AND AVG(salary) < 70000;

Este ejemplo filtra a los directivos que supervisan a más de cinco empleados y tienen un salario medio inferior a 70.000 $.

4. HAVING Sin GROUP BY

SELECT SUM(quantity)
FROM sales
HAVING SUM(quantity) > 1000;

Este ejemplo demuestra el uso de HAVING sin GROUP BY, filtrando todo el conjunto de datos para encontrar si la cantidad total supera las 1000 unidades.

Consejos y buenas prácticas

  • Utilízalo con GROUP BY. HAVING está diseñado para funcionar con GROUP BY; asegúrate de que tu consulta agrupa los datos adecuadamente, aunque también puede utilizarse sin él para la agregación de conjuntos de datos completos.
  • Optimiza con índices. Considera la posibilidad de indexar las columnas utilizadas en la cláusula GROUP BY para mejorar el rendimiento.
  • Filtra pronto con WHERE. Utiliza la cláusula WHERE para filtrar las filas antes de la agregación para mayor eficacia.
  • Evita el uso excesivo. Utiliza HAVING con moderación, ya que filtrar los resultados agregados puede consumir muchos recursos.