在mysql中添加4个独立表的SUM

时间:2013-06-30 12:12:57

标签: mysql

我有4个表,共有两个字段

total_share和idea_user_id

我写了一个queru来计算每个表的total_share的总和中的total_income

这是我的查询

SELECT(
                         (SELECT SUM(total_share) FROM `idea_submitter_percentage` WHERE idea_user_id='3')
                           +
                         (SELECT SUM(total_share) FROM `idea_revisor_percentage` WHERE idea_user_id='3')
                           +
                         (SELECT SUM(total_share) FROM `idea_contributor_percentage` WHERE idea_user_id='3')
                            +
                         (SELECT SUM(total_share) FROM `idea_comparisor_percentage` WHERE idea_user_id='3')
                )
AS total_income

问题是当我在每个表中至少有一行时,它的工作正常,其中idea_user_id ='3'

但如果我有一个基于idea_user_id ='3'没有条目的表,则它返回NULL,因此名为total_income的总量返回NULL

我该如何解决这个问题

3 个答案:

答案 0 :(得分:2)

您可以使用coalesce()来处理空值:

select coalesce(sum(...), 0) ...

或者你可以在外部查询中移动总和,并在子查询中坚持联合所有:

select sum(...)
from ( select ... from ...
       union all
       select ... from ...
       ... ) as sub
...

您也可以加入所有表格(juergen的回答)。

答案 1 :(得分:0)

这种语法在oracle中有效...基本上,你需要一个外连接。

    SELECT NVL(SUM(total_share),0) 
FROM `idea_comparisor_percentage` 
WHERE idea_user_id (+) ='3'

答案 2 :(得分:-1)

使用left outer join将表格放在一起,并使用IFNULL()检查null条目

SELECT SUM
        (
            ifnull(s.total_share, 0) + 
            ifnull(r.total_share, 0) + 
            ifnull(c.total_share, 0) +  
            ifnull(p.total_share, 0)
        ) as total_sum
FROM idea_submitter_percentage s
left outer join idea_revisor_percentage r on r.idea_user_id = s.idea_user_id
left outer join idea_contributor_percentage c on c.idea_user_id = s.idea_user_id
left outer join idea_comparisor_percentage p on p.idea_user_id = s.idea_user_id
WHERE s.idea_user_id = 3