[Fwd: Re: surprising results with random()]

Started by John R Pierceabout 17 years ago2 messagesgeneral
Jump to latest
#1John R Pierce
pierce@hogranch.com

ries van Twisk wrote:

Jessi,

should the function not look like this???

CREATE OR REPLACE VIEW test_view AS
SELECT
CASE
WHEN random() < .333333333 THEN '1'
WHEN random() < .5 THEN '2'
ELSE '3'
END AS test_value

FROM client;

actually, I'd think that should be .66666

but... wouldn't floor(random() * 3.0) + 1 be a simpler way to do this?

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: John R Pierce (#1)
Re: [Fwd: Re: surprising results with random()]

John R Pierce <pierce@hogranch.com> writes:

ries van Twisk wrote:

should the function not look like this???

CREATE OR REPLACE VIEW test_view AS
SELECT
CASE
WHEN random() < .333333333 THEN '1'
WHEN random() < .5 THEN '2'
ELSE '3'
END AS test_value

FROM client;

actually, I'd think that should be .66666

Nah, ries is correct. Think of it this way: one-third of the time the
first WHEN succeeds, and you get '1'. In *half of the remaining cases*,
you want '2', so the second test should be against 0.5.

but... wouldn't floor(random() * 3.0) + 1 be a simpler way to do this?

Agreed...

regards, tom lane