无法解决此SQL查询

时间:2016-06-10 10:03:06

标签: postgresql

我在处理SQL查询时遇到了困难。我使用PostgreSQL。

查询说明:显示至少已完成包含3个不同类别产品的订单的客户。结果将是2列CustomerID和订单数量。我写过这段代码,但我认为这不正确。

select SalesOrderHeader.CustomerID,
       count(SalesOrderHeader.SalesOrderID) AS amount_of_orders
from SalesOrderHeader 
inner join SalesOrderDetail on
       (SalesOrderHeader.SalesOrderID=SalesOrderDetail.SalesOrderID)
inner join Product on 
       (SalesOrderDetail.ProductID=Product.ProductID)

where SalesOrderDetail.SalesOrderDetailID in 
       (select DISTINCT count(ProductCategoryID)
        from Product
        group by ProductCategoryID
        having count(DISTINCT ProductCategoryID)>=3)

group by SalesOrderHeader.CustomerID;

以下是查询所需的数据库表:

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:0)

where SalesOrderDetail.SalesOrderDetailID in 
             (select DISTINCT count(ProductCategoryID)

永远不会给你一个结果,因为ID(SalesOrderDetailID)永远不会在逻辑上匹配COUNTcount(ProductCategoryID))。

这可以为您提供我认为您想要的输出。

SELECT soh.CustomerID, COUNT(soh.SalesOrderID) AS amount_of_orders
FROM SalesOrderHeader soh
INNER JOIN SalesOrderDetail sod ON soh.SalesOrderID = sod.SalesOrderID
INNER JOIN Product p ON sod.ProductID = p.ProductID
HAVING COUNT(DISTINCT p.ProductCategoryID) >= 3
GROUP BY soh.CustomerID

答案 1 :(得分:0)

试试这个:

select CustomerID,count(*) as amount_of_order from 
  SalesOrder join 
 (
   select SalesOrderID,count(distinct ProductCategoryID) CategoryCount 
     from SalesOrderDetail JOIN Product using (ProductId)
  group by 1
 ) CatCount using (SalesOrderId) 
 group by 1 
 having bool_or(CategoryCount>=3) -- At least on CategoryCount>=3