Ok I am a little rusty in SQL. I have 2 exactly same tables with columns ID, Name, Gender, BG. BG is a internal reference. I can query each table individually:
SELECT Gender,BG, COUNT(BG) CountValue FROM income GROUP BY Gender,BG
Result:
F AA 63 F BA 55 M BB 3
and
SELECT Gender, BG, COUNT(BG) CountValue FROM outcome GROUP BY Gender, BG
Result:
F AA 12 F BA 4 M BB 54
I try to aggregated both using UNION ALL what resulted with a combination of the results bellow. I want to sum them together with the result:
F AA 75 F BA 59 M BB 57
Advertisement
Answer
Having two identical tables is usually a problem with the data model. You should have one table with another column to indicate “income” or “outcome”.
But, you can use union all and group by:
select gender, bg, sum(cnt)
from ((select gender, bg, count(*) as cnt
from income
group by gender, bg
) union all
(select gender, bg, count(*) as cnt
from outcome
group by gender, bg
)
) io
group by gender, bg;
Using union all ensures that groups that are in only one table are in the result set. Doing the group by first allows each subquery to be optimized, say if there is an index. However, there is overhead for the outer group by as well.