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

时间:2013-02-12 05:22:16

标签: mysql sql navicat

我正在为一个客户开展一个项目,并要求在3个不同的表上总共有3个不同的列,其中这些数量的状态表示为“已清除”。

这三个表(作为例子):

PAYMENT1

ID | Amount | Status  
1  | 200    | Cleared

PAYMENT2

ID | Amount | Status              
1  | 100    | Cleared

PAYMENT3

ID | Amount | Status  
1  | 300    | Cleared

我已经提出了以下代码,它基本上实现了我想要实现的功能,但是正在处理的值将被乘以3(当从多个表中添加值时)。

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的预期结果。

任何人都可以找出出错的地方吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以使用union all和三个选择查询将结果作为单个表格获得,然后使用sum aggregate函数获取状态被清除的金额总和。