在以下sqlfiddle的示例中,我想获得特定国家/地区所有卖家的销售清单,即使一个或多个卖家没有销售:
http://www.sqlfiddle.com/#!9/b60247/10/0
SELECT ts.name AS seller_name,
COALESCE(SUM(tsa.sales), 0) AS sales_total
FROM tseller ts
LEFT JOIN tseller_country tsc ON ts.id = tsc.name
LEFT JOIN tsales tsa ON tsc.country = tsa.country
WHERE tsa.country = '1'
GROUP BY ts.name
ORDER BY ts.id
然而,而不是以下结果
Marie 370
Peter 0
Marge 0
我得到了
Marie 370
Peter 370
Marge 370
答案 0 :(得分:2)
您只能根据国家/地区ID选择销售。因此,对于每个用户,只要他们在给定的国家/地区销售,就会使用相同的销售额。
为销售联接添加新规则会更正总和。要查看总和为0的结果,您还需要更改WHERE
子句以检查tseller_country
表(总和0 =>销售表中没有条目)。
正确的版本可能是这样的:
SELECT ts.name AS seller_name,
SUM(tsa.sales) AS sales_total
FROM tseller ts
LEFT JOIN tseller_country tsc ON ts.id = tsc.name
LEFT JOIN tsales tsa ON tsc.country = tsa.country AND ts.id = tsa.name
WHERE tsc.country = '1'
GROUP BY ts.name
ORDER BY ts.id