Mysql 使用GROUP BY进行左连接和求和-所有行上的结果相同

Mysql 使用GROUP BY进行左连接和求和-所有行上的结果相同,mysql,Mysql,在以下SQLFIDLE示例中,我希望获得特定国家/地区所有卖家的销售列表,即使一个或多个卖家没有销售: 然而,不是下面的结果 Marie 370 Peter 0 Marge 0 我明白了 您仅根据国家/地区id选择销售。因此,对于每个用户,只要他们在给定的国家/地区销售,就使用相同的销售作为总额 为销售联接添加新规则将更正总和。要查看合计为0的结果,您还需要更改WHERE子句以检查tseller_country表(合计0=>sales表中无条目) 正确的版本可能是这样的: SELECT ts

在以下SQLFIDLE示例中,我希望获得特定国家/地区所有卖家的销售列表,即使一个或多个卖家没有销售:

然而,不是下面的结果

Marie 370
Peter 0
Marge 0
我明白了


您仅根据国家/地区id选择销售。因此,对于每个用户,只要他们在给定的国家/地区销售,就使用相同的销售作为总额

为销售联接添加新规则将更正总和。要查看合计为0的结果,您还需要更改
WHERE
子句以检查
tseller_country
表(合计0=>sales表中无条目)

正确的版本可能是这样的:

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

您仅根据国家/地区id选择销售。因此,对于每个用户,只要他们在给定的国家/地区销售,就使用相同的销售作为总额

为销售联接添加新规则将更正总和。要查看合计为0的结果,您还需要更改
WHERE
子句以检查
tseller_country
表(合计0=>sales表中无条目)

正确的版本可能是这样的:

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

首先我要重命名你的专栏:例如ts.id=tsc上的
。name
令人困惑。你怎么知道谁卖了什么?还有,我发现在桌子前贴“t”字的做法真的很不好。我不明白,你在
t国家里只有id:1,2,3,4。在
tseller_country.country
列中,值
6
。对不起。我试图创建一个复杂查询的简单示例。我想从所有美国卖家(玛丽、彼得和玛吉)那里得到一份销售清单。玛丽有三次销售。Peter和Marge没有销路。我会先重命名你的专栏:例如ts.id=tsc上的
。name
令人困惑。你怎么知道谁卖了什么?还有,我发现在桌子前贴“t”字的做法真的很不好。我不明白,你在
t国家里只有id:1,2,3,4。在
tseller_country.country
列中,值
6
。对不起。我试图创建一个复杂查询的简单示例。我想从所有美国卖家(玛丽、彼得和玛吉)那里得到一份销售清单。玛丽有三次销售。Peter和Marge没有销售。请注意,
LEFT JOIN x。。。其中x=…
内部连接x..相同。
谢谢草莓谢谢Jonas Schwabe。请注意
左连接x。。。其中x=…
内部连接x..相同。
谢谢草莓谢谢Jonas Schwabe。
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