【发布时间】:2015-02-08 20:55:10
【问题描述】:
我有这个查询,有三个表(发票,客户地址,国家),我想返回每个国家的销售数量,有些国家没有销售,所以我想返回零作为销售计数而不是排除他们从结果中。
SELECT c.name,c.iso_code,c.id as country_id, COUNT(*) as sales_count ,SUM(a.total_due) as gross
FROM `invoices` a
JOIN `customer_addresses` b
ON b.`customer_id` = a.`customer_id`
JOIN `countries` c
ON c.`id` = b.`country_id`
WHERE a.`status` = 'Paid' AND a.`deleted` ='No'
GROUP BY c.name
样本数据:
发票
id | total_due | customer_id
1 | 25 | 5
2 | 45 | 7
客户地址
id | address | customer_id | country_id
5 | some address | 1 | 3
7 | some address | 2 | 4
国家
id | name | iso_code
3 | USA | US
4 | United Kingdom | UK
5 | France | Fr
【问题讨论】:
-
在询问 sql 查询问题时包含示例数据和所需结果总是明智的。是否应将地址位于多个国家/地区的客户的销售额计入每个国家/地区?
-
@popovitsj 我添加了示例数据,您可以看到“France”在“customer_addresses”表中没有引用,所以我的查询没有返回结果,我也想包括 France , sales_count = 0
标签: mysql sql join inner-join