pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Petr Jezek <Petr.Jezek@i.cz>
Cc: pgsql-sql@postgresql.org
Subject: Re: Bad SUM result
Date: Wed, 10 Jul 2002 10:00:59 +0200
Message-ID: <009f01c227e7$edb6bd20$2323a8c0@krysa> (raw)
References: <200207071425.56235.roy@silicontao.com>
	<3D29AE37.ADE9D534@nsd.ca>

There're no another ways? It don't looks like optimal.

Petr Jezek
----- Original Message -----
From: "Jean-Luc Lachance" <jllachan@nsd.ca>
To: "Roy Souther" <roy@silicontao.com>
Cc: <pgsql-sql@postgresql.org>
Sent: Monday, July 08, 2002 5:22 PM
Subject: Re: [SQL] Bad SUM result


> That is because your query is generating a cartesian product.
>
> Try:
>
> SELECT (
>   SELECT SUM(totalprice)
>   FROM invoices
>   WHERE custnumber = '1'
> ) - (
>   SELECT SUM(paymentamount)
>   FROM payments
>   WHERE custnumber = '1'
> )
>
>
>
> Roy Souther wrote:
> >
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA1
> >
> > I have an invoice database that has two tables one for invoices and one
for
> > payments. I want to get the account balance for a client by subtracting
the
> > sum of all payments from the sum off all invoices for that client.
> >
> > Here is the SQL that I thought should work.
> > SELECT SUM(t0.totalprice)-SUM(t1.paymentamount) FROM invoices t0,
payments t1
> > WHERE t0.custnumber='1' AND t1.custnumber='1'
> >
> > It works fine if there is only one invoice and one payment but as soon
as
> > there is more then one of either it screws up. For each match found in
> > payments the invoice sum is added to the total. So if client 1 purchased
a
> > $100 item then maid a $10 payment the SQL would return the balance of
$90
> > just fine. When the client makes a second payment of $15 the balance is
$75
> > but this SQL returns ($100+$100)-($10+$15) = $175. A third payment of $1
> > would return ($100+$100+$100)-($10+$15+$1) = $274.
> >
> > Could some one explain this to me and recommend an SQL command that
would work
> > please? I could do this using a temp table but that would be very messy
as I
> > would really like it to be a single SQL command.
> > - --
> > Roy Souther <roy@SiliconTao.com>
> > http://www.SiliconTao.com
> >
> > Linux: May the source be with you.
> >
> > -----BEGIN PGP SIGNATURE-----
> > Version: GnuPG v1.0.6 (GNU/Linux)
> > Comment: For info see http://www.gnupg.org
> >
> > iEYEARECAAYFAj0oo9MACgkQCbnxcmEBt43qFQCgtjCs7khKGH+2LYd78O9mA3h4
> > vDQAn0GkKkuYl1Kybgm/ITO4LbO1WWLX
> > =1G4R
> > -----END PGP SIGNATURE-----
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org
>




view thread (4+ messages)

Message-ID: <009f01c227e7$edb6bd20$2323a8c0@krysa>
Permalink:  ../009f01c227e7$edb6bd20$2323a8c0@krysa/
Also on:    postgresql.org/message-id/009f01c227e7$edb6bd20$2323a8c0@krysa

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: Petr.Jezek@i.cz
  Subject: Re: Bad SUM result
  In-Reply-To: <009f01c227e7$edb6bd20$2323a8c0@krysa>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox