我有两张桌子。
我需要从表2中获取id计数的数量,并从表1中获取id的名称。
我尝试了以下代码。不起作用!
select orders.CustomerID, customers.ContactName , count(*)
from Orders
left join customers on Customers.CustomerID= Orders.customerid
group by Orders.customerid;如果可能的话,请解释一下我的缺点。
发布于 2019-10-01 22:23:25
当对group by部分进行分组时,查询的group by部分需要提到所有列tat都出现在aggregate like COUNT之外。你错过了这里的ContactName。固定版本:
select orders.CustomerID, customers.ContactName , count(*)
from Orders
left join customers on Customers.CustomerID= Orders.customerid
group by Orders.customerid, customers.ContactName;或者,您可以只按ID分组,然后像这样进行联接:
With OrderCounts AS
(
select orders.CustomerID , count(*) AS OrderCount
from Orders
group by Orders.customerid
)
SELECT OrderCounts.CustomerID
, customers.ContactName
, OrderCounts.OrderCount
FROM OrderCounts
left join customers on Customers.CustomerID= OrderCounts.CustomerID 第一个版本更短,更容易输入。在某些情况下,第二个版本会运行得更快,因为group by发生在单个表&列上。
对于第二个示例,为了得到相同的结果,CustomerID在customers表中必须是惟一的,否则它将产生重复的结果(但如果是这样的话,第一个示例将重复计算订单)。
https://stackoverflow.com/questions/58186715
复制相似问题