首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Count(*) with inner join和group by

Count(*) with inner join和group by
EN

Stack Overflow用户
提问于 2019-10-01 22:14:34
回答 1查看 62关注 0票数 1

我有两张桌子。

我需要从表2中获取id计数的数量,并从表1中获取id的名称。

我尝试了以下代码。不起作用!

代码语言:javascript
复制
select orders.CustomerID, customers.ContactName , count(*) 
from Orders 
  left join customers on Customers.CustomerID= Orders.customerid 
group by Orders.customerid;

如果可能的话,请解释一下我的缺点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-01 22:23:25

当对group by部分进行分组时,查询的group by部分需要提到所有列tat都出现在aggregate like COUNT之外。你错过了这里的ContactName。固定版本:

代码语言:javascript
复制
select orders.CustomerID, customers.ContactName , count(*) 
from Orders 
left join customers on Customers.CustomerID= Orders.customerid 
group by Orders.customerid, customers.ContactName;

或者,您可以只按ID分组,然后像这样进行联接:

代码语言:javascript
复制
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表中必须是惟一的,否则它将产生重复的结果(但如果是这样的话,第一个示例将重复计算订单)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58186715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档