Re: Selecting a random row
От | Richard_D_Levine@raytheon.com |
---|---|
Тема | Re: Selecting a random row |
Дата | |
Msg-id | OF2289CBD5.22C6502A-ON05256F42.005A2FDD@ftw.us.ray.com обсуждение исходный текст |
Ответ на | Selecting a random row (Kari Lavikka <tuner@bdb.fi>) |
Список | pgsql-general |
Kari, Why not select count(*) from the table and multiply it by a true 0.0 - 1.0 pseudo random number generator? Then adjust the outcome for the range of uids. If the uids (or some other column) are contiguous starting at 0, this would be a snap. Rick Tom Lane <tgl@sss.pgh.pa.us> To: Kari Lavikka <tuner@bdb.fi> Sent by: cc: pgsql-general@postgresql.org pgsql-general-owner@pos Subject: Re: [GENERAL] Selecting a random row tgresql.org 11/04/2004 10:25 AM Kari Lavikka <tuner@bdb.fi> writes: > -- > -- Choose a random point between 0 and max_uid and select the first > -- value from the bigger part > -- > CREATE OR REPLACE FUNCTION random_uid() RETURNS int4 AS > 'SELECT uid FROM users u WHERE u.status = ''a'' AND uid >= > cast(cast(max_uid() - 1 AS FLOAT) * random() AS INTEGER) ORDER BY uid > ASC LIMIT 1' > LANGUAGE 'sql'; This isn't going to do what you think because the random() function is re-evaluated at every row of the table. (For that matter, so is max_uid(), which means performance would suck even if it worked ...) I'd suggest rewriting in plpgsql so you can assign the (max_uid-1)*random() expression to a variable and then just use the variable in the SELECT. regards, tom lane ---------------------------(end of broadcast)--------------------------- TIP 7: don't forget to increase your free space map settings
В списке pgsql-general по дате отправления: