Re: query on query - Mailing list pgsql-general

From hubert depesz lubaczewski
Subject Re: query on query
Date
Msg-id 20130705120150.GB4377@depesz.com
Whole thread Raw
In response to Re: query on query  (Luca Ferrari <fluca1978@infinito.it>)
List pgsql-general
On Fri, Jul 05, 2013 at 08:35:22AM +0200, Luca Ferrari wrote:
> On Fri, Jul 5, 2013 at 5:09 AM, Jayadevan M
> <jayadevan.maymala@ibsplc.com> wrote:
>
> >
> > So each student may get counted many times, someone with 99 will be counted
> > 10 times. Possible to do this with a fat query? The table will have many
> > thousands of records.
> >
>
>
> Not sure I got the point, but I guess this is a good candidate for a CTE:
>
> WITH RECURSIVE t(n) AS (
>     VALUES (10)
>   UNION ALL
>     SELECT n+10 FROM t WHERE n < 50
> )
> select count(*), t.n from m, t where mark > t.n group by t.n;

This might get expensive with many rows.

On the other hand, you can do it like this:

create table grades (username text, grade int4);
insert into grades select 'x', int(rand() * 50) from generate_series(1,100);

with a as
  (select (grade/10)*10 as mark,
                     count(*)
   from grades
   group by mark)
select mark,
       sum(count) over (
                        order by mark)
from a
order by mark;

Whis should be faster.

Best regards,

depesz



pgsql-general by date:

Previous
From: Stuart Ford
Date:
Subject: "soft lockup" in kernel
Next
From: Thomas Kellerer
Date:
Subject: Re: Triggers