SQL

¿Cómo usar el Having en SQL Server con ejemplos?

Estrada Web Group
jiestrada

Resumen: en este tutorial, aprenderás a usar la cláusula HAVING de SQL Server para filtrar los grupos según las condiciones especificadas.

Introducción a la cláusula HAVING de SQL Server

La cláusula HAVING se usa a menudo con la cláusula GROUP BY para filtrar grupos en una lista específica de condiciones. A continuación se ilustra la sintaxis de la cláusula HAVING:

--https://estradawebgroup.com
SELECT
    select_list    
FROM
    table_name
GROUP BY
    group_list
HAVING
    conditions;

En la sintaxis anterior, la cláusula GROUP BY enlista las filas que se agruparan y la cláusula HAVING aplica una o más condiciones a cualquiera de estos grupos, siempre y cuando los especifiques en el HAVING. Solo los grupos que cumplen con las condiciones establecidas se evalúan como TRUE y se incluyen en el resultado de la consulta SELECT. En otras palabras, los grupos para los que la condición se evalúa como FALSE o UNKNOWN se filtran y no los regresara en la consulta.

Cláusula HAVING y GROUP BY

Dado que SQL Server procesa la cláusula HAVING después de la cláusula GROUP BY, no puedes hacer referencia a la función agregada especificada en la lista de selección mediante el alias de la columna. La siguiente consulta fallará:

SELECT
    column_name1,
    column_name2,
    aggregate_function (column_name3) column_alias
FROM
    table_name
GROUP BY
    column_name1,
    column_name2
HAVING.   
    column_alias > value;
--https://estradawebgroup.com

En su lugar, debes usar la expresión con la función agregada en la cláusula HAVING explícitamente, como se muestra a continuación:

SELECT
    column_name1,
    column_name2,
    aggregate_function (column_name3) alias
FROM
    table_name
GROUP BY
    column_name1,
    column_name2
HAVING
    aggregate_function (column_name3) > value;


Ejemplos para filtrar registros con HAVING de SQL Server

Tomemos algunos ejemplos para entender cómo funciona la cláusula HAVING.
El primer ejemplo del uso de la cláusula HAVING que veremos es con la función COUNT de SQL Server.

Consulta la siguiente tabla de pedidos de la base de datos de muestra que aquí puedes descargar:

ejemplo de sql having

 

HAVING y COUNT

La siguiente declaración usa la cláusula HAVING y COUNT para encontrar todos los clientes que realizaron al menos dos pedidos al año:

SELECT
    customer_id,
    YEAR (order_date) fecha,
    COUNT (order_id) order_count
FROM
    sales.orders
GROUP BY
    customer_id,
    YEAR (order_date)
HAVING
    COUNT (order_id) >= 2
ORDER BY
    customer_id;

Resultado (primeros 10):

customer_id fecha order_count
1 2018 2
2 2017 2
3 2018 3
4 2017 2
5 2016 2
6 2018 2
7 2018 2
9 2018 2
10 2018 2

Analizando el ejemplo podemos ver lo siguiente:

  • Primero, la cláusula GROUP BY agrupa la orden de venta por cliente y año de orden. La función COUNT() devuelve el número de pedidos que cada cliente realizó en cada año.
  • En segundo lugar, la cláusula HAVING filtró todos los clientes cuyo número de pedidos es inferior a dos y regreso los que si cumplen con la condición.

 

Ejemplo del uso de la cláusula HAVING con la función SUM() de SQL Server.

En este ejemplo tomaremos en cuenta la tabla order_items de la misma base de datos de prueba:

¿Dónde va el HAVING?

La siguiente declaración encuentra las órdenes de venta cuyos valores netos son mayores a 20,000 usando la función SUM:

SELECT
    order_id,
    SUM (
        quantity * list_price * (1 - discount)
    ) net_value
FROM
    sales.order_items
GROUP BY
    order_id
HAVING
    SUM (
        quantity * list_price * (1 - discount)
    ) > 20000
ORDER BY
    net_value;

Resultado (primeros 10):

order_id net_value
1 10231.0464
2 1697.9717
3 1519.981
4 1349.982
5 3900.0607
6 9442.5048
7 2165.0817
8 1372.4719
9 7199.982
10 242.991

Analizando el ejemplo podemos ver lo siguiente:

  • Primero, la función SUM() devuelve los valores netos de las órdenes de venta.
  • En segundo lugar, la cláusula HAVING filtra las órdenes de venta cuyos valores netos son menores o iguales a 20,000 y regresa las que cumplen con la condición.

 

Ejemplo del uso de la cláusula HAVING con la función MAX y MIN de SQL Server.

Ahora haremos un select a la siguiente tabla de productos de la misma base de datos de prueba:

¿Qué significa en SQL la orden HAVING?

La siguiente declaración usa las funciones MAX() y MIN() para encontrar primero los precios de lista máximos y mínimos en cada categoría de producto. Luego, filtra la categoría que tiene el precio de lista máximo superior a 4000 o el precio de lista mínimo inferior a 500:

SELECT
    category_id,
    MAX (list_price) max_list_price,
    MIN (list_price) min_list_price
FROM
    production.products
GROUP BY
    category_id
HAVING
    MAX (list_price) > 4000 OR MIN (list_price) < 500;

Resultado:

category_id max_list_price min_list_price
1 489.99 89.99
2 2599.99 416.99
3 2999.99 250.99
5 4999.99 1559.99
6 5299.99 379.99
7 11999.99 749.99

 

Ejemplo del uso de la cláusula HAVING con la función AVG() de SQL Server.

La siguiente declaración usa la función AVG() para encontrar las categorías de productos cuyos precios de lista promedio están entre 500 y 1,000:

SELECT
    category_id,
    AVG (list_price) avg_list_price
FROM
    production.products
GROUP BY
    category_id
HAVING
    AVG (list_price) BETWEEN 500 AND 1000;

Resultado:

category_id avg_list_price
2 682.123333
3 730.412307

En este tutorial, aprendiste a usar la cláusula HAVING de SQL Server para filtrar grupos de registros según las condiciones específicas que estableciste.

Compartir artículo:

Más artículos geniales

Cómo validar si un valor es NULL y regresar otro valor con la función ISNULL en SQL Server

Cómo validar si un valor es NULL y regresar otro valor con la función ISNULL en SQL Server

Resumen: en este tutorial, aprenderás a usar la función ISNULL() de SQL Server para reemplazar NULL con un valor especifico.

Ver artículo completo
Cómo obtener el número de caracteres de una cadena en SQL Server con la función LEN()

Cómo obtener el número de caracteres de una cadena en SQL Server con la función LEN()

En este tutorial, aprenderá cómo usar la función LEN() de SQL Server para obtener la cantidad de caracteres de una cadena.

Ver artículo completo

Manténgase actualizado

Obtenga excelente contenido en su bandeja de entrada todas las semanas.
Solo contenido excelente, no compartimos su correo electrónico con terceros.
Subir al inicio de la pantalla ;