Thread: SUM not matching up on a JOIN

SUM not matching up on a JOIN

From
Tyler Kellen
Date:
<pre>The trans table contains the stub for each transaction and the trans_item table contains all the items belonging
tothe transaction.  I need to be able to pull categorized reports for items and have all of the totals less the
discountsmatch up with the total from the stubs for a given period.  Why is my discount total different when I left
jointhe trans table to the totals? 
mg=# SELECT SUM(subtotal+tax) AS total, SUM(discount) AS discount FROM trans WHERE
DATE_TRUNC('DAY',stamp)='20051010';total | discount 
--------+----------438.35 |     9.75
(1 row)

mg=# SELECT    sum(item_price+round(item_price*item_tax,2)*qty) as total, sum(t.discount)
mg-# FROM      trans_item ti
mg-# LEFT JOIN trans t
mg-# ON        ti.trans_id=t.id
mg-# WHERE     date_trunc('day',t.stamp)='20051010';total  | discount
--------+----------444.10 |    14.52


mg=# \d trans                                       Table "public.trans"   Column     |            Type             |
                   Modifiers 
---------------+-----------------------------+-------------------------------------------------------id            |
integer                    | not null default nextval('public.trans_id_seq'::text)stamp         | timestamp without
timezone | default now()trans_type_id | integer                     | not nullsubtotal      | numeric(6,2)
 | default 0.00tax           | numeric(6,2)                | default 0.00discount      | numeric(6,2)                |
default0.00total_cash    | numeric(6,2)                | default 0.00total_credit  | numeric(6,2)                |
default0.00total_check   | numeric(6,2)                | default 0.00total_gift    | numeric(6,2)                |
default0.00 
mg=# \d trans_item                              Table "public.trans_item"  Column   |     Type     |
    Modifiers 
------------+--------------+------------------------------------------------------------id         | integer      | not
nulldefault nextval('public.trans_item_id_seq'::text)trans_id   | integer      | not nullparent     | integer      |qty
      | integer      | not null default 1item_sku   | text         | not nullitem_price | numeric(5,2) |item_tax   |
numeric(4,4)| 
</pre>

Re: SUM not matching up on a JOIN

From
Tom Lane
Date:
Tyler Kellen <sleekcode@gmail.com> writes:
> Why is my discount total different when I
> left join the trans table to the totals?

Are you sure that trans_item.trans_id is unique and accounts for all the
existing values of trans.id?  I don't see any unique index or foreign
key constraints in your \d output, so the database isn't enforcing that
condition for you ...
        regards, tom lane