sábado, 1 de marzo de 2025

Curso de SQL. Filtrar resultados usando HAVING

A diferencia de la cláusula WHERE, HAVING se puede utilizar con funciones agregadas. Una función agregada es una función donde se agrupan los valores de varias filas juntos como información sobre ciertos criterios para formar un valor único de significado más significativo o medición.

Las funciones agregadas comunes incluyen COUNT(), SUM(), MIN() y MAX().

Este ejemplo utiliza la tabla Coches de una base de datos de ejemplo.

SELECT IdCliente, COUNT(Id) AS [Numero de Coches] FROM Coches

GROUP BY IdCliente HAVING COUNT(Id) > 1

Esta consulta devolverá el ID de cliente y el número de coches de cualquier 
cliente que tenga más de uno. En este caso, hay dos clientes que tienen 
más de uno, el 1 y el 4, el cliente 1 tiene 2 coches y el cliente 4 tiene 3 coches.



Los resultados se verán así:
Id. de cliente Número de Coches

stomerId ProductId Quantity Price

1                   2

4                   3

También se puede utilizar HAVING para comprobar si hay clientes que hayan pedido dos productos determinados. Por ejemplo en este caso se quiere saber los clientes que han pedido el producto con Id = 2 e Id = 3.

SELECT IdCliente FROM Pedidos WHERE IdProducto in (2,3)

GROUP by IdCliente HAVING count(distinct IdProducto) = 2

La consulta selecciona solo registros con los IdProducto 2 y 3 y con la cláusula
 HAVING busca solo los clientes que hayan pedido ambos IdProducto  
y no solo uno.
Otra posibilidad sería

SELECT IdCliente FROM orders GROUP BY IdCliente HAVING SUM(CASE WHEN IdProducto = 2 THEN 1 ELSE 0 END) > 0 AND SUM(CASE WHEN productID = 3 THEN 1 ELSE 0 END) > 0 

Esta consulta selecciona solo grupos que tengan al menos un registro con 
IdProducto =  2 y al menos uno con IdProducto = 3.

 

No hay comentarios:

Publicar un comentario