Lists: | pgsql-generalpgsql-novicepgsql-sql |
---|
From: | Luis Magaña <joe666(at)gnovus(dot)com> |
---|---|
To: | PostgreSQL General <pgsql-general(at)postgresql(dot)org>, PostgreSQL Novice <pgsql-novice(at)postgresql(dot)org>, PostgreSQL SQL <pgsql-sql(at)postgresql(dot)org> |
Subject: | For each record in SELECT |
Date: | 2003-01-31 21:21:17 |
Message-ID: | 1044048077.1380.3.camel@kerberus |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-general pgsql-novice pgsql-sql |
Hi,
I have a question here:
I have a table with this fields:
month
description
amount
now I have to write a query that retrieves the sum of the amount from
the minimum month to the maximum month registered for each diferent
description.
Of course there are cases when a particular description has not record
for all the months in that period. I mean, suppouse you have this
records:
month description amount
-----------------------------------------------
June description1 100
July description1 500
August description1 600
June description2 300
August description2 400
how you write a query that outputs something like this:
June July August
------------------------------------------
description1 | 100 500 600
description2 | 300 0 400
My problem is for the 0 value.
I hope I've explained clearly my question.
Thanks for the help.
Best Regards.
--
Luis Magaña.
Gnovus Networks & Software.
www.gnovus.com
From: | Keary Suska <hierophant(at)pcisys(dot)net> |
---|---|
To: | PostgreSQL <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: For each record in SELECT |
Date: | 2003-02-01 01:28:34 |
Message-ID: | BA6070D1.17EF4%hierophant@pcisys.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-general pgsql-novice pgsql-sql |
on 1/31/03 2:21 PM, joe666(at)gnovus(dot)com purportedly said:
> now I have to write a query that retrieves the sum of the amount from
> the minimum month to the maximum month registered for each diferent
> description.
>
> Of course there are cases when a particular description has not record
> for all the months in that period. I mean, suppouse you have this
> records:
>
> month description amount
> -----------------------------------------------
> June description1 100
> July description1 500
> August description1 600
> June description2 300
> August description2 400
>
> how you write a query that outputs something like this:
>
> June July August
> ------------------------------------------
> description1 | 100 500 600
> description2 | 300 0 400
>
> My problem is for the 0 value.
Getting this kind of result using only a single SQL query is not likely
possible, especially to get the result table you indicate above. In any
case, it would be easier to group by month and description, sum() the
amount, then aggregate the result table in your application.
Keary Suska
Esoteritech, Inc.
"Leveraging Open Source for a better Internet"
From: | "Andrew J(dot) Kopciuch" <akopciuch(at)bddf(dot)ca> |
---|---|
To: | joe666(at)gnovus(dot)com, PostgreSQL General <pgsql-general(at)postgresql(dot)org>, PostgreSQL Novice <pgsql-novice(at)postgresql(dot)org>, PostgreSQL SQL <pgsql-sql(at)postgresql(dot)org> |
Subject: | Re: [SQL] For each record in SELECT |
Date: | 2003-02-01 02:36:17 |
Message-ID: | 200301311936.18611.akopciuch@bddf.ca |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-general pgsql-novice pgsql-sql |
On Friday 31 January 2003 14:21, Luis Magaña wrote:
> Hi,
>
> I have a question here:
>
> I have a table with this fields:
>
> month
> description
> amount
>
> now I have to write a query that retrieves the sum of the amount from
> the minimum month to the maximum month registered for each diferent
> description.
>
From what I understand in your email you just need to add a GROUP BY clause.
Try a query like this.
SELECT description, sum(amount) FROM table GROUP BY description;
That should do what you need,
Andy
From: | Andrew McMillan <andrew(at)catalyst(dot)net(dot)nz> |
---|---|
To: | joe666(at)gnovus(dot)com |
Cc: | PostgreSQL General <pgsql-general(at)postgresql(dot)org>, PostgreSQL Novice <pgsql-novice(at)postgresql(dot)org>, PostgreSQL SQL <pgsql-sql(at)postgresql(dot)org> |
Subject: | Re: [NOVICE] For each record in SELECT |
Date: | 2003-02-01 04:43:48 |
Message-ID: | 1044074628.26387.12.camel@kant.mcmillan.net.nz |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-general pgsql-novice pgsql-sql |
On Sat, 2003-02-01 at 10:21, Luis Magaña wrote:
> Hi,
>
> I have a question here:
>
> I have a table with this fields:
>
> month
> description
> amount
>
> now I have to write a query that retrieves the sum of the amount from
> the minimum month to the maximum month registered for each diferent
> description.
>
> Of course there are cases when a particular description has not record
> for all the months in that period. I mean, suppouse you have this
> records:
>
> month description amount
> -----------------------------------------------
> June description1 100
> July description1 500
> August description1 600
> June description2 300
> August description2 400
>
> how you write a query that outputs something like this:
>
> June July August
> ------------------------------------------
> description1 | 100 500 600
> description2 | 300 0 400
>
> My problem is for the 0 value.
If you have another table with columns like:
month description
--------------------
June description1
July description1
August description1
June description2
July description2
August description2
Then you will be able to do an outer join to it like:
SELECT * FROM t1 FULL OUTER JOIN t2 ON t1.month = t2.month AND
t1.description = t2.description
This will give you a NULL, rather than a zero, but your application
should be able to handle that detail.
You can also do this having two tables: one for the months, and another
for the descriptions:
SELECT * FROM months m CROSS JOIN descriptions d FULL OUTER JOIN values
v ON m.month = v.month AND d.description = v.description
I hope this is some use,
Andrew.
--
---------------------------------------------------------------------
Andrew @ Catalyst .Net.NZ Ltd, PO Box 11-053, Manners St, Wellington
WEB: http://catalyst.net.nz/ PHYS: Level 2, 150-154 Willis St
DDI: +64(4)916-7201 MOB: +64(21)635-694 OFFICE: +64(4)499-2267
Survey for nothing with http://survey.net.nz/
---------------------------------------------------------------------