Re: multiple rows by date using count(*) - Mailing list pgsql-general

From Andreas Kretschmer
Subject Re: multiple rows by date using count(*)
Date
Msg-id 20090705092507.GA12399@tux
Whole thread Raw
In response to multiple rows by date using count(*)  (Shad Keene <shadkeene@hotmail.com>)
List pgsql-general
Shad Keene <shadkeene@hotmail.com> wrote:

> Hi,
> I have data that I'd like to organize spatially by date.  So far, I'm only
> succeeding in displaying the number of times something occurs out of the whole
> dataset.
>
> Here's an example of what I want to do.
> 343 items that occurred at different times from june through july.
> multiple different keywords that are within the items
>
> I want to organize the data into items that occurred in the month of june with
> dates as the columns (so 30 columns) and keywords that occur in the items as
> the row...to look like this:
>
>
>             PRB | RBL | SAC | SFO |
> June 1     2   |  4   |  5    |  2    |
> June 2     1   |  3   |  4    |  0    |
> June 3     0   |  2   |  1    |  2    |
>
> So far, here's the query I'm using to display one row of all items with certain
> keywords, but I've failed at trying to make multiple rows by date.
>
> Here's the query I'm using so far:
> select (select count (*) from zoa_pireps where raw_text like '%RBL%') as RBL,
> (select count(*) from zoa_pireps where raw_text like '%RBL%') as PRB;
>
> Further down the road I want to do spatial relationships linking to a different
> georeferenced table, but I think if I can get the above example working, the
> joining shouldn't be overly difficult.
>
> Thanks for your time and let me know if you need more details...the computer
> I'm doing the queries on is a different one than I'm typing this email, so thus
> the crude examples.
> Shad

You can use the contrib-module called 'tablefunc', it contains a
crosstab() - funktion.

An other easy way, let me show an example:

test=*# select * from foo;
   datum    | category | value
------------+----------+-------
 2009-07-01 | foo      |    10
 2009-07-01 | bla      |    20
 2009-07-01 | bla      |     5
 2009-07-01 | foo      |    14
 2009-07-02 | foo      |    22
(5 rows)

Time: 0.221 ms
test=*# select datum, sum(case when category='foo' then value else 0 end) as "foo", sum(case when category='bla' then
valueelse 0 end) as "bla" from foo group by datum order by datum; 
   datum    | foo | bla
------------+-----+-----
 2009-07-01 |  24 |  25
 2009-07-02 |  22 |   0
(2 rows)

Time: 0.353 ms
test=*# select datum, sum(case when category='foo' then 1 else 0 end) as "foo", sum(case when category='bla' then 1
else0 end) as "bla" from foo group by datum order bydatum; 
   datum    | foo | bla
------------+-----+-----
 2009-07-01 |   2 |   2
 2009-07-02 |   1 |   0
(2 rows)





Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect.                              (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly."   (unknown)
Kaufbach, Saxony, Germany, Europe.              N 51.05082°, E 13.56889°

pgsql-general by date:

Previous
From: Raymond O'Donnell
Date:
Subject: Re: Documentation - PgAdmin
Next
From: Alban Hertroys
Date:
Subject: Re: multiple rows by date using count(*)