MySQL

MySQL HAVING: Condicionar los resultados agrupados de una consulta

En este nuevo post vamos a ver la cláusula de MySQL HAVING, su misión es agrupar los resultados idénticos devueltos de una consulta SELECT.

Otras sentencias de MySQL que os pueden ser útiles:

Sintaxis de MySQL HAVING

Veamos la sintaxis extraída de su web oficial:

SELECT nombre_columnas
FROM nombre_tablas
GROUP BY nombre_columnas
HAVING condición

Repasamos la sintaxis:

  • Comenzamos con el SELECT de una o varias columnas.
  • Con FROM seleccionamos la tabla
  • Esta cláusula se puede/suele usar junto con GROUP BY cuando necesitamos que los resultados agrupados deban cumplir ciertas condiciones que veremos en los ejemplos posteriores. Por lo que no se puede usar la cláusula WHERE con la columna agrupada por GROUP BY, se tiene que hacer con HAVING.

Ejemplos de MySQL HAVING

Veamos con esta serie de ejemplos la funcionalidad de esta cláusula HAVING:

SELECT nombre_producto, precio_producto
FROM productos
GROUP BY nombre_producto
HAVING MIN(precio_producto) < 20

Os explico este primer ejemplo en donde tenemos una tabla donde se guardan los precios históricos de los productos de una tienda, necesitamos mostrar el precio más barato de los productos cuyo valor está por debajo de 20 euros.

  • Seleccionamos con SELECT el nombre del producto y el precio de la tabla productos
  • Los agrupamos por nombre con GROUP BY.
  • Con HAVING ponemos la condición de que el precio muestre el valor mínimo (MIN) que esté por debajo de 20.
SELECT nombre_producto, MIN(precio_producto)
FROM productos
GROUP BY nombre_producto
HAVING MIN(precio_producto) < 20
ORDER BY MIN(precio_producto) ASC

En este nuevo ejemplo hemos añadido una ordenación para que muestre los precios de menor a mayor, para ellos hemos añadido un ORDER BY sobre el precio mínimo.

compartir
Publicado por
Aner Barrena