Home > OS >  Select difference between two tables sums also using group by
Select difference between two tables sums also using group by

Time:01-19

**Im trying to get the difference between two tables sums but i keep getting the wrong outcome **

Table1                                           Table2      

| product  | quantity |                          | product  | quantity |
| -------- | -------- |                          | -------- | -------- |
| a        | 7        |                          | a        | 2        |
| b        | 8        |                          | b        | 4        |
| c        | 9        |                          | c        | 1        |
| c        | 7        |                          | c        | 3        |
| a        | 3        |                          | a        | 2        |
| b        | 4        |                          | b        | 3        |

I tried this queury but i got the wrong values:

select table1.product, sum(table1.quantity) - sum(table2.quantity) as difference
from table1
  join table2 on table1.product = table2.product
group by table1.product,table2.product;

Expected Outcome

Table1

product difference
a 6
b 5
c 12

CodePudding user response:

UNION ALL the tables (where you take -quantity for table2.) GROUP BY the result.

select product, sum(quantity)
from
(
  select product,  quantity from table1
  union all
  select product, -quantity from table2
) dt
group by product

As requested - some comments:

As a general advice, it's safer to GROUP BY (in subqueries) before joining - since a JOIN can result in multiple rows for a value.

Also, to include a product only found in one of the tables, an outer join would have been needed.

  • Related