LEFT JOIN和SUM with GROUP BY - 所有行的结果相同

时间:2017-09-22 11:23:32

标签: mysql

在以下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

1 个答案:

答案 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