metaclass: (Default)
[personal profile] metaclass
Народ, а гляньте в разных СУБД, что покажет такой запрос?
select rand() as a from some_table order by a

Т.е. рандом выбранный из таблицы с несколькими полями и сортировкой по этому же полю. В Firebird, судя по результатам, оно два раза считает рандом - один раз для показа, второй для сортировки.

PS: Firebird не сортирует даже такое:
select * from (select rand() as a from some_table) order by a
Ленивые вычисления без мемоизации и проверки на побочные эффекты у них там что ле.

Date: 2010-09-03 09:06 am (UTC)
From: [identity profile] metaclass.livejournal.com
"Суровый микрософтовский рандом" :)

Date: 2010-09-03 09:36 am (UTC)
From: [identity profile] 184467440737095.livejournal.com
http://xkcd.com/221/

Date: 2010-09-03 03:47 pm (UTC)
From: [identity profile] kisa-i-osya.livejournal.com
Да, у MS крайне весело в этом плане сделано, смешнее там только выборка по смещению (хотя может в 2008 что допилили).

Date: 2010-09-03 04:49 pm (UTC)
From: [identity profile] ennor.livejournal.com
У микрософта документировано, что Rand() вызывается в запросе столько раз, сколько она упомянута в его тексте, поэтому как-либо рандомизировать с ее помощью бесполезно.

Если нужна рандомная сортировка, то как вариант можно использовать newid() - он вызывается по разу на строку. Соответственно, если надо вывести столбец сколько-нибудь читабельного типа, то checksum(newid()), хотя некоторые пуристы морщат от этого носик.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 26th, 2025 01:51 pm
Powered by Dreamwidth Studios