Cláusula HAVING en funciones agregadas de SQL

En este tutorial, analizaremos algunas formas en las que podemos usar o ejecutar la cláusula HAVING en funciones agregadas de SQL . El uso de esta cláusula en funciones agregadas de SQL puede ser de gran ayuda en el resumen de datos.

La cláusula HAVING es casi similar a la declaración WHERE y también se puede ejecutar junto con ella.

Discutiremos sus correlaciones y diferencias proporcionando ejemplos a medida que avanzamos en este tutorial.

Tabla de contenido

Declaraciones GROUP BY y WHERE en SQL

Para nuestro primer ejemplo, discutiremos cómo ejecutar la cláusula WHERE y GROUP BY usando la tabla de muestra a continuación. Tenga en cuenta que solo podemos usar la cláusula WHERE con columnas existentes y no solo en funciones agregadas.

Cláusula HAVING en funciones agregadas de SQL

Digamos que queremos obtener las ventas totales de un producto en función de su columna SaleAmount donde el valor es mayor que 2 . Para obtener el resultado, nuestro comando debe ser el siguiente:

Cláusula HAVING en funciones agregadas de SQL

Primero, seleccionamos ProductName y agregamos SaleAmount para obtener TotalSales. 

Cláusula HAVING en funciones agregadas de SQL

Luego, usamos la declaración WHERE aquí ya que estamos tratando de obtener solo los productos donde SaleAmount es mayor que 2. El comando 'GROUP BY ProductName' indica que agrupará las filas debajo de la columna ProductName en una sola.

Al ejecutar nuestro conjunto de comandos, veremos que de todos los datos en las columnas ProductName y SaleAmount , solo se muestran la bombilla y el ventilador . Eso se debe a que eran los únicos que tenían un SaleAmount superior a 2.

Cláusula HAVING en funciones agregadas de SQL

En este ejemplo, la declaración WHERE es para filtrar resultados con una columna existente, que es nuestro SaleAmount . Además, tenga en cuenta que la declaración WHERE aparece antes de GROUP BY y no se puede usar para filtrar funciones agregadas. Por otro lado, la cláusula HAVING aparece después de GROUP BY y se usa para filtrar en función de una función agregada. 

Cláusula GROUP BY y HAVING en SQL

En este ejemplo, vamos a demostrar la diferencia entre la instrucción WHERE y la cláusula HAVING . Usaremos el mismo objetivo que tenemos en el ejemplo anterior para que podamos comparar y evaluar los resultados. 

Primero mostremos los productos con sus ventas totales usando el siguiente comando. Como puede ver, nuestro primer comando sigue siendo el mismo que nuestro primer comando que ejecuta la instrucción WHERE .

Cláusula HAVING en funciones agregadas de SQL

Si vamos a ejecutar nuestros primeros dos comandos, tendremos el siguiente resultado:

Cláusula HAVING en funciones agregadas de SQL

Ahora, digamos que solo queremos mostrar productos cuya venta total sea superior a 5. No podemos usar la declaración WHERE  ya que solo se puede usar con columnas existentes. Por lo tanto, necesitamos usar la cláusula HAVING ya que filtraremos desde una función agregada. 

Cláusula HAVING en funciones agregadas de SQL

Observe cómo usamos la cláusula HAVING después de GROUP BY a diferencia de la declaración WHERE que se usa antes de GROUP BY. Esto se debe a que SQL agrupará los registros antes de evaluar la cláusula HAVING

Luego, ejecutemos esos comandos junto con HAVING SUM(SaleAmount)>5 . Después de especificar que queremos obtener solo aquellos productos cuyo precio total sea superior a 5, notaremos que en nuestra tabla de resultados actual, ya no veremos el Bolígrafo . Eso es porque su total es menos de 5

Cláusula HAVING en funciones agregadas de SQL

En resumen, cuando queremos filtrar datos de nuestra tabla en función de una columna existente, usamos la cláusula WHERE , mientras que cuando queremos filtrar datos de una función agregada, usamos la cláusula HAVING

Cláusula HAVING y WHERE en SQL Server Management Studio (SSMS)

Ahora, avanzaremos discutiendo y demostrando cómo podemos ejecutar la cláusula HAVING en SQL Server Management Studio (SSMS). También abordaremos la diferencia entre la cláusula HAVING y la cláusula WHERE proporcionando ejemplos.

A continuación se muestra nuestra muestra de datos SalesOrderHeader. Estos datos consisten en 100 filas. Para nuestro ejemplo, queremos obtener TotalSale por CustomerID donde TotalSale es mayor que 10000 . Tenga en cuenta que la venta total se basa en la suma de los valores de la columna TotalDue .

Cláusula HAVING en funciones agregadas de SQL

Primero, permítanme demostrar por qué no podemos usar la cláusula WHERE cuando queremos filtrar en una función agregada según nuestro ejemplo anterior. 

Usaremos el conjunto de comandos de muestra de la imagen a continuación. Como puede ver, técnicamente tenemos el mismo conjunto de comandos que el que tenemos en nuestro primer ejemplo.

Sin embargo, cuando hacemos clic en Ejecutar en la esquina superior izquierda, dará como resultado un error porque no podemos usar la cláusula WHERE sola cuando estamos filtrando en la función agregada.

Cláusula HAVING en funciones agregadas de SQL

Para corregir el error, necesitamos filtrar el resultado usando la cláusula HAVING en lugar de la cláusula WHERE . Nuestro nuevo conjunto de comandos debería ser similar a la imagen de abajo.

Cláusula HAVING en funciones agregadas de SQL

Ahora, podemos ver que nuestro error ha sido corregido y contiene los resultados por CustomerID con un TotalSale mayor a 10000 .

Nuevamente, la cláusula WHERE siempre se usa antes de la cláusula GROUP BY , mientras que la cláusula HAVING siempre se usa después de la cláusula GROUP BY .

Uso de la cláusula HAVING y la cláusula WHERE en SQL  

Para este ejemplo, digamos que queremos usar la cláusula WHERE y HAVING al mismo tiempo. Intentemos obtener TotalSale por CustomerID donde TotalSale es mayor que 10000 pero solo con clientes donde su TerritoryID es igual a 1

Dado que queremos filtrar los resultados con clientes que tienen 1 como TerritoryID , usaremos la cláusula WHERE. Entonces nuestro comando debería ser el mismo que el anterior. Nuevamente, hemos agregado una cláusula WHERE antes de la cláusula GROUP BY.

Cláusula HAVING en funciones agregadas de SQL

Por ahora, no podemos ver mucha diferencia entre nuestro resultado anterior y este nuevo. Sin embargo, si observa detenidamente la esquina inferior derecha, ahora solo tenemos 64 filas en comparación con la anterior con 505 filas de datos. Esto se debe a que los resultados también se filtran según su TerritoryID .

Conclusión

Para resumir, solo podemos usar la cláusula WHERE con columnas existentes. Si necesitamos filtrar con funciones agregadas, debemos usar la cláusula HAVING en su lugar.

El uso de la cláusula HAVING en funciones agregadas de SQL y la práctica de formas de ejecutar la cláusula HAVING y la cláusula WHERE juntas pueden brindar comodidad a los usuarios cuando trabajan con una gran cantidad de datos o registros. 

Espero haberle proporcionado suficiente información y comprensión sobre cómo usar la cláusula HAVING en las funciones agregadas de SQL. Si desea obtener más información sobre este tema y otro contenido relacionado, puede consultar la lista de enlaces relevantes a continuación.

Mis mejores deseos,

Hafiz

Leave a Comment

Time Intelligence en LuckyTemplates: cómo calcular el número de transacciones realizadas en los últimos N días

Time Intelligence en LuckyTemplates: cómo calcular el número de transacciones realizadas en los últimos N días

Descubra cómo calcular el total de transacciones realizadas en los últimos N días y obtenga información útil utilizando la inteligencia de tiempo en LuckyTemplates.

Cómo evaluar clústeres en sus datos mediante la técnica DAX en LuckyTemplates

Cómo evaluar clústeres en sus datos mediante la técnica DAX en LuckyTemplates

En este tutorial, demuestro cómo mostrar clústeres en sus datos permite extraer información valiosa usando técnicas DAX avanzadas.

¿Cuánto personal tenemos actualmente? Lógica de fechas múltiples en LuckyTemplates usando DAX

¿Cuánto personal tenemos actualmente? Lógica de fechas múltiples en LuckyTemplates usando DAX

En este tutorial, aprenderá a calcular la <strong>población actual del personal</strong> para las relaciones múltiples de la tabla de calendario mediante la función COUNTROWS y FILTER en LuckyTemplates.

Hacer una solicitud HTTP en Power Automate

Hacer una solicitud HTTP en Power Automate

Aprenda a crear una solicitud HTTP con Power Automate y cómo implementar soluciones efectivas para la automatización de tareas.

Programe un flujo de escritorio para que se ejecute en Power Automate

Programe un flujo de escritorio para que se ejecute en Power Automate

En este tutorial, aprenda cómo programar un flujo de escritorio en Power Automate para automatizar tareas en la web y su escritorio.

Power Automate Terminar Control de acción en flujos

Power Automate Terminar Control de acción en flujos

Aprenda a usar correctamente el control Terminar acción de Power Automate que termina las acciones en un flujo si no se cumple alguna de las condiciones.

Power Query: combinar archivos de varias carpetas

Power Query: combinar archivos de varias carpetas

Aprenda a combinar archivos de varias carpetas en su red, escritorio, OneDrive o SharePoint utilizando Power Query.

Tipos de flujo de Power Automate y cuándo usarlos

Tipos de flujo de Power Automate y cuándo usarlos

En este blog, analizamos las similitudes y diferencias entre los tipos de flujo de Power Automate y determinamos cuándo usar cada flujo. Encuentra la mejor opción de automatización.

Conectores de Power Automate: número, texto y fecha y hora

Conectores de Power Automate: número, texto y fecha y hora

Familiarízate con algunos conectores Power Automate integrados que transforman cadenas en otro formato: número, texto y fecha y hora.

Tutorial del analizador VertiPaq: relaciones e integridad referencial

Tutorial del analizador VertiPaq: relaciones e integridad referencial

Este tutorial detallado sobre el analizador VertiPaq en DAX Studio le enseñará cómo usar la pestaña Relaciones para optimizar su DAX y resolver problemas de integridad referencial.