使用mysql连接统计客户的发票数量
My使用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
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来实现这一点。除非需要发票表中的任何列,否则您不需要发票。