Поведение запроса
Sep. 3rd, 2010 08:39 amНарод, а гляньте в разных СУБД, что покажет такой запрос?
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
Date: 2010-09-03 09:05 am (UTC)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
Date: 2010-09-03 09:06 am (UTC)no subject
Date: 2010-09-03 09:36 am (UTC)no subject
Date: 2010-09-03 03:47 pm (UTC)no subject
Date: 2010-09-03 04:49 pm (UTC)Если нужна рандомная сортировка, то как вариант можно использовать newid() - он вызывается по разу на строку. Соответственно, если надо вывести столбец сколько-нибудь читабельного типа, то checksum(newid()), хотя некоторые пуристы морщат от этого носик.