From: | Martijn van Oosterhout <kleptog(at)svana(dot)org> |
---|---|
To: | Alban Hertroys <alban(at)magproductions(dot)nl> |
Cc: | Postgres General <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Obtaining random rows from a result set |
Date: | 2007-08-31 13:54:16 |
Message-ID: | 20070831135416.GA23673@svana.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Fri, Aug 31, 2007 at 02:42:18PM +0200, Alban Hertroys wrote:
> Examples:
> * random(maxrows) would return random rows from the resultset.
> * median() would return the rows in the middle of the result set (this
> would require ordering to be meaningful).
It would be possible to write an aggregate that returns a single random
value from a set. The algorithm is something like:
n = 1
v = null
for each row
if random() < 1/n:
v = value of row
n = n + 1
return v
It does require a seqscan though. If you're asking for 5 random rows
you probably mean 5 random but distinct rows, which is different to
just running the above set 5 times in parallel.
I don't know if there's a similar method for median...
Have a nice day,
--
Martijn van Oosterhout <kleptog(at)svana(dot)org> http://svana.org/kleptog/
> From each according to his ability. To each according to his ability to litigate.
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2007-08-31 14:14:32 | Re: Out of memory error, FreeBSD 6.2, PostgreSQL 8.2.4 |
Previous Message | Csaba Nagy | 2007-08-31 13:45:47 | Re: Obtaining random rows from a result set |