SQL SUM + Distinct

3

我希望知道如何使用SUM函数和DISTINCT关键字来显示不重复的各个客户的金额总和。

我使用了:

SELECT DISTINCT id_721z, SUM(montant) AS somme_montant 
FROM `roue_ventes_cb` 
WHERE `date_transaction` between '2015/01/01' and '2015/01/21';

但是结果显示不正确。我有以下数据:

id_721z | 金额

1   |   15
1   |   15
2   |   22
2   |   22
2   |   22

我希望显示总金额为37,而不是

id_721z | montant

1   |   30
2   |   66

2
你能否提供样本输出并解释为什么它是不正确的?考虑使用sqlfiddle.com。 - Taras Velykyy
由于重复客户的存在,总金额被夸大了。 - Ayed Mohamed Amine
2个回答

4
SELECT SUM(montant) AS somme_montant
FROM (
    SELECT DISTINCT id_721z, montant
    FROM `roue_ventes_cb`
    WHERE `date_transaction` between '2015/01/01' and '2015/01/21'
) AS t

请在您的答案顶部观看我的回复。 - Ayed Mohamed Amine
2
@Ayedmedamine:如果你想要37,eumiro的答案是正确的。 - Joe Taras

2

这将求出所有不同金额的总和。但如果两个ID具有相同的金额,它只会计算一次。

SELECT id_721z, SUM(DISTINCT montant) AS somme_montant 
FROM `roue_ventes_cb` 
WHERE `date_transaction` between '2015/01/01' and '2015/01/21';

在任何情况下,我都更喜欢emiros的答案。它更安全,而且distint无论如何都会有性能损失。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接