如果该解决方案应该很明显,请提前对此问题表示抱歉。我已经搜索过,但尚未找到解决方案。
我有一个包含2列的Orders表:CustID和ProductBrand。
ProductBrand是订购商品的品牌,例如索尼,惠普,戴尔等
我想获取订购了至少10个ProductBrand = Sony但少于5个项目(ProductBrand = HP)的客户的 list 。
我可以按照这些思路做些什么吗?
SELECT o1.CustID
FROM Orders o1 HAVING COUNT(o1.ProductBrand="Sony") >= 10
INNER JOIN Orders o2 ON o1.CustID = o2.CustID
HAVING COUNT(o2.ProductBrand="HP") < 5;
最佳答案
您可以在没有自连接的情况下执行此操作,只需进行聚合即可:
select o.custid
from orders o
group by o.custid
having sum(case when o.ProductBrand = 'Sony' then 1 else 0 end) >= 10 and
sum(case when o.ProductBrand = 'HP' then 1 else 0 end) < 5;
在MySQL中,您可以通过删除
case
来简化此操作:select o.custid
from orders o
group by o.custid
having sum(o.ProductBrand = 'Sony') >= 10 and
sum(o.ProductBrand = 'HP') < 5;