SQL查询-添加多个表中的总金额



我正在为一个客户处理一个项目,需要3个不同表上3个不同列的总和,其中这些金额的状态表示为"已清除"。

这三个表是(例如):

付款1

ID | Amount | Status  
1  | 200    | Cleared

付款2

ID | Amount | Status              
1  | 100    | Cleared

付款3

ID | Amount | Status  
1  | 300    | Cleared

我已经想出了以下代码,它基本上实现了我想要实现的目标,但正在处理的值将乘以三(当将多个表中的值相加时)。

SELECT SUM(CASE WHEN P1.`Status` = "Cleared" THEN P1.Amount ELSE 0 END) 
     + SUM(CASE WHEN P2.`Status` = "Cleared" THEN P2.Amount ELSE 0 END)
     + SUM(CASE WHEN P3.`Status` = "Cleared" THEN P3.Amount ELSE 0 END) AS ClearedFunds
FROM PAYMENT1 As P1, 
     PAYMENT2 As P2, 
     PAYMENT3 As P3 ;

上面的查询将返回(来自给定的示例):1800,而不是预期的600。

有人能发现出了什么问题吗?

SELECT  ID, SUM(Amount) totalAmount
FROM
    (
        SELECT  ID, Amount
        FROM    payment1
        WHERE   Status = 'Cleared'
        UNION ALL
        SELECT  ID, Amount
        FROM    payment2
        WHERE   Status = 'Cleared'
        UNION ALL
        SELECT  ID, Amount
        FROM    payment3
        WHERE   Status = 'Cleared'
    ) s
GROUP   BY ID

您可以将union all与三个select查询一起使用,以获得单个表的结果,然后使用sum aggregate函数来获得清除状态的金额总和。

相关内容

  • 没有找到相关文章

最新更新