From: | Ragnar <gnari(at)hive(dot)is> |
---|---|
To: | "A(dot) R(dot) Van Hook" <hook(at)lake-lotawana(dot)mo(dot)us> |
Cc: | postgresql sql list <pgsql-sql(at)postgresql(dot)org> |
Subject: | Re: join problem |
Date: | 2007-06-24 12:10:15 |
Message-ID: | 1182687015.5953.270.camel@localhost.localdomain |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
On sun, 2007-06-24 at 06:14 -0500, A. R. Van Hook wrote:
[ in the future, please avoid top-posting, as it is annoying
to have to rearrange lines when replying ]
> Ragnar wrote:
> > On lau, 2007-06-23 at 04:15 -0500, A. R. Van Hook wrote:
> >> Ragnar wrote:
> >>> On fim, 2007-06-21 at 08:46 -0500, A. R. Van Hook wrote:
> >>>
> >>>> [problem involving a join, with sum on base table column]
> >>> you are adding the invoice deposit once for each item
> >>>
> >> What is the correct query???
> >
> > sum each invoice separately, and then group the sums by cusid.
> >
> > for example:
> > ...
> > sum(v.deposit)/count(*) as vdeposit
> > from invoice as v
> > left join invoiceitems as i on (v.ivid = i.ivid)
> > group by v.cusid,
> > v.ivid
> > ...
> Works great.
> Can you enlighten me as why the deposit is divided by the number of rows?
maybe an example would clarify a bit:
say you have only one invoice (deposit=100),
with 2 invoiceitems (both with rowtot=50)
"select sum(deposit) from invoice" returns 100
"select sum(rowtot) from invoiceitems" returns 100
the query:
select ivid,deposit,rowtot
from invoice
left join invoiceitems
on (invoice.ivid = invoiceitems.ivid)
returns the rows:
ivid | deposit | rowtot
1 | 100 | 50
1 | 100 | 50
if you just select a SUM(deposit) on that join,
you get 200, not 100 because the value is repeated
for each invoiceitem.
hope this helps
gnari
From | Date | Subject | |
---|---|---|---|
Next Message | Joshua | 2007-06-25 14:29:35 | simple SQL question |
Previous Message | A. R. Van Hook | 2007-06-24 11:14:00 | Re: join problem |