问:对于每个客户列表,客户ID和下订单总数。
我相信我可以用这三个表执行此查询
Customer_T Order_T OrderLine_T
+------+------+------+- +---------+-----------+-------+ +---------+-----------------+
|CustID| CNAME | Addr | | OrderID | OrderDate |CustID | |OrderID | OrderedQuantity |
+------+------+------+ +-------+----+--------+-------+ +---------+-----------------+
我尝试了几个查询,这是我最新的迭代,返回错误Customer_T.CustomerID无效,因为它不包含在聚合函数或group by子句中。
SELECT
Customer_T.CustomerID, Order_T.OrderID
FROM
Customer_T, Order_T, OrderLine_T
WHERE
Order_T.CustomerID=Customer_T.CustomerID
AND Order_T.OrderID=OrderLine_T.OrderID
ORDER BY
COUNT(OrderLine_T.OrderedQuantity)
我不知道该去哪里......我应该使用Join运算符吗?
编辑:我应该提到需要从Customer_T表中提取额外的CustID是b / c有些客户没有购买任何东西而且没有包含在订单表中(对于每个客户)。
答案 0 :(得分:0)
这可以帮助你得到正确答案。
SELECT ord.CustID, count(ord.CustID) AS OrderCount, cust.CNAMR
FROM Customer_T cust JOIN Order_T ord
ON ( ord.CustomerID=cust.CustomerID)
JOIN OrderLine_T ordLine
ON ( ord.OrderID=ordLine.OrderID)
GROUP BY ord.CustID ORDER BY OrderCount Desc
但在这里获取订单数量会比较棘手。
答案 1 :(得分:0)
这就是你需要的。
SELECT C.CustID, COUNT(OL.OrderedQuantity)
FROM Customer_T C
JOIN Order_T O ON(O.OrderID=C.CustID)
JOIN OrderLine_T OL ON(O.OrderID = OL.OrderID)
GROUP BY C.CustID
答案 2 :(得分:0)
由于您只需要“...列出CustomerID和下达的订单总数”,您不需要加入任何其他表,所有信息都可以在Order_T
表中找到:
SELECT CustID, COUNT(OrderID) AS OrderCount
FROM Order_T
GROUP BY CustID
如果您想显示客户的姓名,则需要加入表格。
答案 3 :(得分:0)
试试这个
SELECT
C.CustID,
SUM(CASE O.OrderID WHEN NULL THEN 0 ELSE 1 END) AS NumberOfOrdersPlaced
FROM Customer_T C
LEFT JOIN Order_T O ON (O.CustID = C.CustID)
GROUP BY C.CustID
上述查询将返回为每位客户下达的订单数量。如果客户尚未下订单,则NumberOfOrdersPlaced
列的值将为0.
答案 4 :(得分:0)
对于每个客户列表,客户ID和下订单总数
这只需要2个表(客户和订单)
SELECT
Customer_T.CustomerID
, COUNT(Order_T.OrderID) orders_per_customer
FROM Customer_T
LEFT OUTER JOIN Order_T ON Customer_T.CustomerID = Order_T.CustomerID
GROUP BY
Customer_T.CustomerID
ORDER BY
Customer_T.CustomerID
;
请注意LEFT OUTER JOIN
的使用,此连接类型允许返回Customer_T中的所有记录,即使他们尚未下订单。我建议您访问here for a visual representation of SQL joins。
您可以添加第三个表以获取其他信息,但您需要注意不要夸大订单数量,因为每个订单的订单项意味着一对多关系(单个订单项很多)订购)。您可以通过引入COUNT(DISTINCT ...)
SELECT
Customer_T.CNAME
, Customer_T.CustomerID
, COUNT(DISTINCT Order_T.OrderID) orders_per_customer
, SUM(OrderLine_T.OrderedQuantity) sum_of_quantity
FROM Customer_T
LEFT OUTER JOIN Order_T ON Customer_T.CustomerID = Order_T.CustomerID
LEFT OUTER JOIN OrderLine_T ON Order_T.OrderID = OrderLine_T.OrderID
GROUP BY
Customer_T.CNAME
, Customer_T.CustomerID
ORDER BY
Customer_T.CNAME
, Customer_T.CustomerID
;
请注意,数量之和不是一个非常有意义的指标,它只是作为方法的证明。