我有2张桌子。 SalesOrderDetail和SalesOrderHeader。
SalesOrderDetails包含SalesOrderID和ProductID列。 SalesOrderHeader包含SalesOrderID和CustomerID。
我想创建一个查询,显示订购了3个或更多具有不同ProductID的产品的客户以及他订购了多少订单(包含3个或更多不同的产品)。我知道当SalesOrderDetail表的SalesOrderID号超过3次或更多次时,客户订购了3个或更多产品。
因此ID为29825的客户订购了12种不同的产品。
这是我的代码:
SELECT "SalesOrderHeader"."CustomerID", count("SalesOrderDetail"."SalesOrderID") AS TotalOrders
FROM
public."SalesOrderHeader",
public."SalesOrderDetail"
WHERE
"SalesOrderHeader"."SalesOrderID" = "SalesOrderDetail"."SalesOrderID"
GROUP BY "SalesOrderHeader"."CustomerID"
HAVING count("SalesOrderDetail"."SalesOrderID") >= 3
问题在于它显示了他订购的产品数量,但我希望总订单包含3种或更多不同的产品。
答案 0 :(得分:0)
如果您希望每个客户拥有3个或更多产品的总订单,则使用两个级别的聚合:
select soh."CustomerID", count(*) as NumOrders
from public."SalesOrderHeader" soh join
(select SalesOrderID, count(distinct ProductID) as numproducts
from public."SalesOrderDetail" sod
group by SalesOrderId
) sod
on sod."SalesOrderID" = soh."SalesOrderID"
where numproducts >= 3
group by soh."CustomerID"