我有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
我该如何解决这个问题
答案 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