5th Dec 2022 Lectura de 6 minutos Tutorial de SQL HAVING Zahin Rahman SQL aprender SQL teniendo Índice La Función de la Cláusula HAVING de SQL La sintaxis HAVING de SQL Ejemplos de HAVING en SQL Ejemplo 1: HAVING con COUNT() Ejemplo 2: HAVING con SUM() Ejemplo 3: HAVING con AVG() Dominar la cláusula HAVING de SQL Aprenda a utilizar la cláusula HAVING de SQL para filtrar grupos utilizando sus propias condiciones especificadas. La cláusula HAVING de SQL suele ser un concepto difícil de entender, especialmente para los principiantes. Además, sus casos de uso específicos pueden ser difíciles de visualizar sin ejemplos concretos basados en conjuntos de datos del mundo real. En este tutorial, aprenderá a aplicar la cláusula HAVING de SQL para filtrar grupos de registros basados en condiciones específicas. Verá ejemplos en los que aplicamos este concepto para resolver problemas empresariales en un conjunto de datos realista. La Función de la Cláusula HAVING de SQL La cláusula SQL HAVING se utiliza normalmente con la cláusula GROUP BY para filtrar grupos de filas devueltas. Sólo cuando la condición especificada es TRUE se incluyen las filas en el grupo. La cláusula SQL GROUP BY organiza los datos en grupos basados en valores comunes; se utiliza con mayor frecuencia para obtener información de resumen y calcular estadísticas agregadas. Si desea un repaso más profundo de este tema, consulte este artículo sobre SQL GROUP BY. Puede haber cierta confusión sobre WHERE y HAVING, pero la diferencia es fácil de explicar. La cláusula WHERE aplica una condición en toda la columna filtrando filas individuales. No funciona con funciones agregadas como SUM() y AVG(). Por otro lado, HAVING pone condiciones de filtrado en los grupos creados por la cláusula GROUP BY. Puede utilizarse con funciones de agregación. Por ejemplo, consideremos la siguiente tabla. Muestra una lista de clientes agrupados por ciudades en varios países. Si quisiéramos ver grupos de ciudades con 3 o más clientes, necesitaríamos una cláusula HAVING que satisfaga esta condición en cada una de las ciudades (es decir, los grupos). CustomerIDCityCountry 009BerlinGermany 045BerlinGermany 101BerlinGermany 098BernSwitzerland 003BernSwitzerland 154Buenos AiresArgentina 111Buenos AiresArgentina 039Buenos AiresArgentina ……… 191WallaPoland En otras palabras, la cláusula HAVING es esencialmente una cláusula WHERE que opera sobre los registros devueltos por GROUP BY. (También tenemos una comparación más profunda entre HAVING y WHERE si está interesado en profundizar). La sintaxis HAVING de SQL HAVING no funcionará sin la cláusula GROUP BY. Debe seguir a la cláusula GROUP BY en una consulta y debe preceder a la cláusula ORDER BY (si está utilizando una). Sólo se devolverán los grupos que cumplan los criterios de HAVING. Por ejemplo, probemos la siguiente consulta en la tabla customers tabla: SELECT COUNT(CustomerID), City, Country FROM Customers WHERE Country = 'Brazil' GROUP BY City, Country HAVING COUNT(CustomerID) > 1 ¿Qué ocurre en esta consulta? En primer lugar, la cláusula WHERE filtra las filas aplicables para el país "Brasil". En segundo lugar, la cláusula GROUP BY agrupa las entradas en función de los valores de las columnas City y Country. Tercero, la cláusula HAVING filtra los grupos - en este caso, sólo estamos interesados en las ciudades brasileñas que tienen más de 1 cliente. El curso LearnSQL.es SQL para principiantes cubre la sintaxis y la aplicación de la cláusula HAVING en un entorno atractivo e interactivo. Si quieres practicar, esta es mi recomendación. Pero primero, veamos más ejemplos de HAVING. Ejemplos de HAVING en SQL Vamos a sumergirnos en algunos ejemplos que presentan diferentes funciones agregadas para que podamos entender cómo funciona realmente la cláusula HAVING. Utilizaremos la siguiente tabla de clientes OrderDetails que tiene un total de 518 filas. Tiene un total de 518 filas de datos de pedidos directos. Esto incluye información como los pedidos Quantity y ProductID junto con un único OrderID para cada pedido. OrderDetailIDOrderIDProductIDQuantity 1102481112 2102484210 310248725 410249149 510249142 6102495140 ………… 518104432812 Como analista de datos, una de sus principales funciones sería obtener información sobre los datos de ventas. Exploraremos tres problemas sencillos destinados a encontrar algunos de esos conocimientos. Ejemplo 1: HAVING con COUNT() PROBLEMA: Listar todos los productos con más de 12 pedidos individuales realizados. CONSULTA: SELECT COUNT(ProductID), ProductID FROM OrderDetails GROUP BY ProductID HAVING COUNT(ProductID) > 12 RESULTADO: Number of Records: 5 COUNT(ProductID)ProductID 1431 1459 1362 1371 1472 Si no hubiéramos incluido la cláusula HAVING, esta consulta devolvería esencialmente el número de registros igual al número único de ProductIDs. Aquí, GROUP BY coloca los pedidos con el mismo ProductID en grupos. A continuación, la cláusula HAVING coloca la condición de filtrado en cada uno de esos grupos y devuelve los que tienen un recuento superior a 12. Ejemplo 2: HAVING con SUM() PROBLEMA: Listar todos los productos que han tenido más de 350 cantidades totales pedidas. CONSULTA: SELECT SUM(Quantity), ProductID FROM OrderDetails GROUP BY ProductID HAVING SUM(Quantity) > 350 ORDER BY SUM(Quantity) DESC RESULTADO: Number of Records: 3 COUNT(ProductID)ProductID 45831 43060 36935 En el ejemplo anterior, GROUP BY agrupa de forma similar los pedidos por ProductID. Luego, la cláusula HAVING coloca la condición de filtrado (la suma de la columna Quantity debe ser superior a 350) en cada uno de esos grupos. Por último, ORDER BY devuelve los resultados en orden descendente. Ejemplo 3: HAVING con AVG() PROBLEMA: Listar todos los productos que han tenido más de 35 cantidades pedidas de media y al menos 4 pedidos realizados. CONSULTA: SELECT AVG(Quantity), COUNT(ProductID), ProductID FROM OrderDetails GROUP BY ProductID HAVING AVG(Quantity) > 35 AND COUNT(ProductID) > 3 ORDER BY AVG(Quantity) DESC RESULTADO: Number of Records: 6 AVG(Quantity)ProductIDCOUNT(ProductID) 41.25234 41359 38.75584 35.836012 35.6445 35.11339 En el ejemplo 3, después de agrupar los pedidos por ProductID, la cláusula HAVING pone dos condiciones de filtrado en los grupos: una cantidad media de pedido superior a 35 y un número de pedidos individuales superior a 3. Basándonos en los tres ejemplos anteriores, hemos aprendido que ProductID 31, por ejemplo, estaba incluido en el mayor número de pedidos individuales (14) y también tenía el mayor número de cantidades pedidas entre todos los pedidos realizados (458). Se trata sin duda de uno de los productos más populares de la tienda. Además, ProductIDs 23, 35 y 58 tuvieron las mayores cantidades medias por pedido. Este tipo de información es muy valiosa, ya que permite a las empresas saber en qué productos centrarse y cómo comercializarlos. Dominar la cláusula HAVING de SQL Como acabamos de ver, la cláusula HAVING es indispensable para calcular valores agregados en grupos de datos. Por lo tanto, siempre se utiliza en combinación con una cláusula GROUP BY y restringe los datos en los registros agrupados en lugar de en los registros individuales. Si quieres aprender más sobre el uso de la cláusula HAVING de SQL, prueba nuestro curso SQL para principiantes . Cubre la cláusula HAVING en detalle y explica más sobre la agrupación, el filtrado y el ordenamiento de los datos. También hay muchos problemas de práctica y cuestionarios para que te sientas realmente cómodo utilizando el SQL básico. Tags: SQL aprender SQL teniendo