使用 HAVING 检查组中的多个条件

订单表

顾客 ID 产品编号 数量 价钱
1 2 100
1 3 2 200
1 4 1 500
2 1 4 50
3 6 700

要检查订购了产品 ID 2 和产品 ID 3 的客户,可以使用 HAVING

 select customerId
 from orders
 where productID in (2,3)
 group by customerId
 having count(distinct productID) = 2

返回值:

顾客 ID
1

查询仅选择带有产品 ID 的记录,并使用 HAVING 子句检查具有 2 个 productId 的组,而不只是一个。

另一种可能性是

 select customerId
 from orders
 group by customerId
 having sum(case when productID = 2 then 1 else 0 end) > 0
    and sum(case when productID = 3 then 1 else 0 end) > 0

此查询仅选择具有至少一个具有 productID 2 的记录且至少一个具有 productID 3 的组。