Re: short-cutting if sum()>constant - Mailing list pgsql-sql

From Ivan Sergio Borgonovo
Subject Re: short-cutting if sum()>constant
Date
Msg-id 20091223000031.54ad09b5@dawn.webthatworks.it
Whole thread Raw
In response to Re: short-cutting if sum()>constant  (Pavel Stehule <pavel.stehule@gmail.com>)
Responses Re: short-cutting if sum()>constant  (Ivan Sergio Borgonovo <mail@webthatworks.it>)
List pgsql-sql
On Tue, 22 Dec 2009 20:47:18 +0100
Pavel Stehule <pavel.stehule@gmail.com> wrote:

> Hello
> 
> I found one ugly trick. You can multiply lines and SUM > cons
> could be replaced limit clause:

The trick is really smart (and fun), kudos, really, it's always a
pleasure to read your solutions, thanks.

But as expected:

In a table with 100000 rows with random values [0,9]

test=# select sum(x) from (select 1 as x,(a =
generate_series(1,a))::int from data limit 100000) s; sum
--------100000
(1 row)

Time: 71.423 ms

test=# create or replace function tano(a int, out b int)
returns int as
$$
declare       row record;
beginb :=0;       for row in select a as _a from data       loop               b := row._a + b;               if (b>=a)
then                      return;               end if;       end loop;       return;
 
end;
$$ language plpgsql;

test=# select * from tano(100000);  b
--------100000
(1 row)

Time: 0.187 ms

I run both several times to avoid simple caching issues... anyway I
didn't really run a serious benchmark, but results were always in
the same order of magnitude.

I hope I didn't make any mistake.

-- 
Ivan Sergio Borgonovo
http://www.webthatworks.it



pgsql-sql by date:

Previous
From: Pavel Stehule
Date:
Subject: Re: short-cutting if sum()>constant
Next
From: Ivan Sergio Borgonovo
Date:
Subject: Re: short-cutting if sum()>constant