Поведение запроса
Народ, а гляньте в разных СУБД, что покажет такой запрос?
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
Ленивые вычисления без мемоизации и проверки на побочные эффекты у них там что ле.
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
Ленивые вычисления без мемоизации и проверки на побочные эффекты у них там что ле.
no subject
0.428764130499554
0.428764130499554
0.428764130499554
0.428764130499554
0.428764130499554
0.428764130499554
0.428764130499554
0.428764130499554
0.428764130499554
0.428764130499554
Oracle
0.0340502316890291520609274798136731095
0.06966350796121921730751139575552875007
0.17747052266147076347678040999937326222
0.49795768228249410394342364833528708444
0.60710830867856256337963017053010671276
0.85658177766850710468589586440907014732
0.93991548869458585047818002155989260127
0.97454067210107331088487610807397372431
no subject
no subject
no subject
no subject
Если нужна рандомная сортировка, то как вариант можно использовать newid() - он вызывается по разу на строку. Соответственно, если надо вывести столбец сколько-нибудь читабельного типа, то checksum(newid()), хотя некоторые пуристы морщат от этого носик.