我在学习SQL。有一个特定的查询我觉得很难实现(使用PostgreSQL数据库)。
有人可以帮助我吗?
查询:"至少有一个订单包含至少3个产品类别的产品的客户是谁?"。
结果应包含2列:customerID
和Quantity of orders
。
表格如下:
ProductID (id of a product)
| ProductCategoryID (product categories)
两个整数。 SalesOrderID (id order)
| SalesOrderDetailID
| OrderQty
| ProductID
,所有这些都是整数。 SalesOrderID
| CustomerID
,两个整数。到目前为止,我唯一得到的是声明的第一部分:
select salesorderheader.customerID, salesorderdetail.orderqty
from salesorderheader, salesorderdetail;
示例数据:
productid | productcategoryid
-----------+-------------------
1 | 2
2 | 2
3 | 3
4 |
salesorderid | salesorderdetailid | orderqty | productid
--------------+--------------------+----------+-----------
43659 | 1 | 1 | 776
43659 | 2 | 3 | 777
43659 | 3 | 1 | 778
salesorderid | customerid
--------------+------------
43659 | 29825
43660 | 29672
43661 | 29734
答案 0 :(得分:1)
我在这里看到两种方法:
1)生成一个子查询,其中包含salesOrderID的计数和用于该销售订单的Distinct ProductCategories的数量。
SELECT customerID, count(Distinct OH.SalesOrderID) SalesOrdersWithMoreThan3Categories
FROM SalesOrderHeader OH
INNER JOIN (SELECT OD.SalesOrderID, Count(Distinct P.ProductCategoryID) Cnt
FROM SalesOrderDetail OD
INNER JOIN Product P
on P.ProudctID = OD.ProductID
GROUP BY OD.SalesOrderID) B
on OH.SalesOrderID = B.SaleOrderID
and B.cnt >=3
GROUP BY OH.customerID
2)使用存在来识别订单详细信息不同productCategories的数量> = 3
SELECT OH.customerID, count(Distinct OH.SalesOrderID) SalesOrdersWithMoreThan3Categories
FROM SalesOrderHeader OH
WHERE exists (SELECT 1
FROM SalesOrderDetail OD
INNER JOIN Product P
on P.ProudctID = OD.ProductID
WHERE OH.SalesOrderID = OD.SalesOrderID
GROUP BY OD.SalesOrderID
HAVING Count(Distinct P.ProductCategoryID) >=3)
GROUP BY OH.customerID