两个名为Sales.Customers和Sales.Orders的表。
Sales.Customers与列具有外键关系 在Sales.Orders中命名为CustomerID。
要求:返回所有客户的查询。查询还必须返回每个客户下的订单数。
查询1:
SELECT cust.cutomername,
NumberofOrders= COUNT(ord.OrderID)
FROM Sales.Customers Cust
LEFT JOIN
Sales.Orders Ord
ON Cust.CustomerID=Ord.OrderID
GROUP BY
Cust.CutomerName;
但是我也在考虑下一个,
Query2:
SELECT cust.cutomername,
NumberofOrders= COUNT(Cust.cutomerID)
FROM Sales.Customers Cust
LEFT JOIN
Sales.Orders Ord
ON Cust.CustomerID=Ord.OrderID
GROUP BY
Cust.CutomerName;
您推荐哪一个,为什么?
答案 0 :(得分:2)
此查询:
SELECT c.customername, COUNT(o.OrderID)
FROM Sales.Customers c LEFT JOIN
Sales.Orders o
ON c.CustomerID = o.OrderID
GROUP BY c.CustomerName;
可能返回所有无意义计数的客户-可能是0
,而恰好匹配OrderID
的{{1}}除外。
您可能打算:
CustomerID
在此查询中,SELECT c.customername, COUNT(o.OrderID)
FROM Sales.Customers c LEFT JOIN
Sales.Orders o
ON c.CustomerID = o.CustomerId
GROUP BY c.CustomerName;
正在计算匹配订单的数量。对于没有订单的客户,其值可以为COUNT()
。
对于此查询:
0
SELECT c.customername, COUNT(c.OrderID)
FROM Sales.Customers c LEFT JOIN
Sales.Orders o
ON c.CustomerID = o.CustomerID
GROUP BY c.CustomerName;
返回的行数 。每个客户至少有一行,因此该值永远不会是COUNT()
。通常,您需要上一个查询。
答案 1 :(得分:0)
也许这是您的解决方案:
select c.Customername,
NumberOfOrders = (select count(o.OrderID) from Sales.Orders o where o.CustomerID = c.CustomerID)
from Sales.Customers c
order by c.Customername