使用mysql连接统计客户的发票数量

使用mysql连接统计客户的发票数量,mysql,sql,database,join,Mysql,Sql,Database,Join,Myinvoices表有orderId列,该列是引用orders表的orderId主键列的外键,orders表有customerId列,该列引用customers表的customerId主键列。 一个客户可以有多个订单,但一个订单只有一张发票 我想清点每位客户的发票数量。以下是我尝试的查询: SELECT customers.name, COUNT(*) as number_of_invoices FROM invoices JOIN orders ON invoices.orderId

My
invoices
表有
orderId
列,该列是引用orders表的
orderId主键列的外键,orders表有
customerId
列,该列引用customers表的
customerId
主键列。 一个客户可以有多个订单,但一个订单只有一张发票

我想清点每位客户的发票数量。以下是我尝试的查询:

SELECT customers.name, COUNT(*) as number_of_invoices 
FROM invoices 
JOIN orders 
ON invoices.orderId = orders.orderId 
JOIN customers 
ON orders.customerId = customers.customerId;

但是它只返回一个客户,并且计数是总计数,而不是该客户的发票计数。

以下是解决您问题的方法:

SELECT customers.name, COUNT(*) as number_of_invoices 
FROM invoices 
INNER JOIN orders 
ON invoices.orderId = orders.orderId 
INNER JOIN customers 
ON orders.customerId = customers.customerId
GROUP BY Customers.name;

如果您只需要知道每个客户的发票数量,只需在最后的查询中添加
分组依据
,即可对每个客户的发票数量进行分组。

。它可以在不加入
的情况下完成。因为订单和发票有一对一的映射,所以您可以使用下面的sql查询

select customerId ,count(orderId) as invoice_count from orders group by customerId

您需要添加
按客户分组。名称
在末尾。@Brainy Prb如果您发现此解决方案有用,请接受我的答案作为答案。很好,但我也需要客户的名称,所以加入是必需的,对吗?不,您也可以使用内联查询。我讨厌加入。内联查询更具可读性。不过,如果您想使用
JOIN
,您只能使用两个表orders和customers来实现这一点。除非需要发票表中的任何列,否则您不需要发票。