I have a union of two separate tables that are summed using a group by. I want a consolidated sum recognizing the group by.
Table A x 2 x 1 y 1
Table B x 2 y 3 y 2
Here is the result that i desire --
x 5 y 6
My sql does not work
select colA, sum(colB) from A group by colA union select colA, sum(colB) from B group by colA
Instead of my desired results, I am getting duplicate x and y rows.
My understanding of recent developments in the SQL standard is that you should be able to write a query like this --
select colA, sum(colB) from ( select colA, sum(colB) from A group by colA union all select colA, sum(colB) from B group by colA ) group by colA
This construction has something to do with SQL being orthogonal or whatever the word is. Any place where you can refer to a table, you should be able to write a subquery that produces a result set -- which is, as we all know, just another table. So the above should work, even though I have never tried it. Please let me know if it doesn't (and on which database you tried it).
By the way, you need UNION ALL and not UNION -- if some value of colA had the same sum in Table A as Table B, the duplicate row would be eliminated. Also, note that you could write it so that the UNION ALL involves two SELECTs that do not use GROUP BY, leaving the grouping and summing to the outer query.
A method that will work involves creating a temporary table into which you insert the intermediate results --
create table TempSums ( colA char , colB integer ) insert into TempSums select colA, sum(colB) from A group by colA insert into TempSums select colA, sum(colB) from B group by colA
Then you derive your consolidated results from the temporary table --
select colA, sum(colB) from TempSums group by colA
For More Information
- What do you think about this answer? E-mail the edtiors at editor@searchDatabase.com with your feedback.
- The Best SQL Web Links: tips, tutorials, scripts, and more.
- Have an SQL tip to offer your fellow DBAs and developers? The best tips submitted will receive a cool prize. Submit your tip today!
- Ask your technical SQL questions -- or help out your peers by answering them -- in our live discussion forums.
- Ask the Experts yourself: Our SQL, database design, Oracle, SQL Server, DB2, metadata, object-oriented and data warehousing gurus are waiting to answer your toughest questions.
This was first published in January 2002