Resumen: en este tutorial, aprenderás a utilizar la cláusula MySQL HAVING
para especificar una condición de filtro para grupos de filas o agregados.
Introducción a la cláusula HAVING de MySQL
La cláusula HAVING
se utiliza en la sentencia SELECT
para especificar condiciones de filtrado para un grupo de filas o agregados.
La cláusula HAVING
suele utilizarse con la cláusula GROUP BY
para filtrar grupos en función de una condición especificada. Si se omite la cláusula GROUP BY
, la cláusula HAVING
se comporta como la cláusula WHERE
.
Lo siguiente ilustra la sintaxis de la cláusula HAVING
:
Code language: SQL (Structured Query Language) (sql)SELECT select_listFROM table_nameWHERE search_conditionGROUP BY group_by_expressionHAVING group_condition;
En esta sintaxis, se especifica una condición en la cláusula . Si una fila, generada por la cláusula group by, hace que la cláusula group_condition
se evalúe como verdadera, la consulta la incluirá en el conjunto de resultados.
Nota que la cláusula HAVING
aplica una condición de filtro a cada grupo de filas, mientras que la cláusula WHERE
aplica la condición de filtro a cada fila individual.
MySQL evalúa la cláusula HAVING
después de la cláusula FROM
WHERE
SELECT
y GROUP BY
y antes de las cláusulas ORDER BY
, y LIMIT
.
HAVING
se evalúa antes de la cláusula SELECT
y después de la cláusula GROUP BY
.Ejemplos de la cláusula HAVING de MySQL
Vamos a poner algunos ejemplos de uso de la cláusula HAVING
para ver cómo funciona. Utilizaremos la tabla orderdetails
de la base de datos de ejemplo para la demostración.
Lo siguiente utiliza la cláusula GROUP BY
para obtener los números de pedido, el número de artículos vendidos por pedido, y el total de ventas de cada uno desde la tabla orderdetails
:
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumber;
Prueba
Ahora, puedes encontrar qué pedido tiene un total de ventas superior a 1000
utilizando la cláusula HAVING
de la siguiente manera:
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000;
Prueba
Puedes construir una condición compleja en la cláusula HAVING
utilizando operadores lógicos como OR
y AND
.
El siguiente ejemplo utiliza la cláusula HAVING
para encontrar pedidos que tengan importes totales superiores a 1000
y que contengan más de 600
artículos:
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000 AND itemsCount > 600;
Prueba
Supongamos que quieres encontrar todos los pedidos que están en estado de envío y tienen el importe total mayor de 1500, puedes unir la tabla orderdetails
con la tabla orders
utilizando la cláusula INNER JOIN
y aplicar una condición sobre la columna status
y el agregado total
como se muestra en la siguiente consulta:
Code language: SQL (Structured Query Language) (sql)SELECT a.ordernumber, status, SUM(priceeach*quantityOrdered) totalFROM orderdetails aINNER JOIN orders b ON b.ordernumber = a.ordernumberGROUP BY ordernumber, statusHAVING status = 'Shipped' AND total > 1500;
Prueba
El HAVING
sólo es útil cuando se utiliza con la cláusula GROUP BY
para generar la salida de los informes de altonivel de informes. Por ejemplo, puede utilizar la cláusula HAVING
para responder a preguntas como encontrar el número de pedidos de este mes, este trimestre o este año que tienen un total de ventas superior a 10K.
En este tutorial, ha aprendido a utilizar la cláusula MySQL HAVING
con la cláusula GROUP BY
para especificar condiciones de filtrado para grupos de filas o agregados.
- ¿Ha sido útil este tutorial?
- SíNo
Se puede decir que este tutorial ha sido útil.