Поведение запроса
Народ, а гляньте в разных СУБД, что покажет такой запрос?
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
no subject
0.0192578518942537
0.2605017761332
0.945262504690571
MySQL
no subject
no subject
-1681682900
-1570261554
448989160
888323830
902538527
1006354456
1546290389
no subject
no subject
no subject
no subject
select random() as a from generate_series(1,10) order by a
сортировано
Оракл
select dbms_random.value from all_objects where rownum<10 order by dbms_random.value
сортировано
no subject
no subject
no subject
Вы order by 1 покажите, кстати.
И вдогонку
no subject
Re: И вдогонку
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
Re: И вдогонку
постгрес
select random() as a from generate_series(1,10) order by random()*1
тоже не сортирует.
no subject
на запрос
SELECT dbms_random.value as rv FROM
ORDER BY rv
SQuirrel (под убунту) выдает
java.lang.NoClassDefFoundError: net/sourceforge/squirrel_sql/fw/datasetviewer/TableState
Position: 0
SQL Developer отрабатывает нормально
ЗЫ. Все бросил и побежал репортить баг. Ога.
no subject
no subject
no subject
TOra,
SQL Developer,
SQuirrel
%-)
И это, считай, я по большому счету не работаю. Так, по верхам SQL\DBA.
no subject
А скрипты консольным тулом запускаю.
no subject
Жаба же
no subject
-2115078253
-745643079
-448782669
-203839498
-72273143
1606308000
no subject
0,744765434690354
0,744765434690354
0,744765434690354
0,744765434690354
0,744765434690354
0,744765434690354
0,744765434690354
0,744765434690354
0,744765434690354
0,744765434690354
0,744765434690354
0,744765434690354
0,744765434690354
0,744765434690354
0,744765434690354
no subject
no subject
Если нужна рандомная сортировка, то как вариант можно использовать newid() - он вызывается по разу на строку. Соответственно, если надо вывести столбец сколько-нибудь читабельного типа, то checksum(newid()), хотя некоторые пуристы морщат от этого носик.
no subject
Если это не так - то это баг оптимизатора
no subject
select some_expr() from table вызывается на каждую строчку заново.
Но если выражение не зависит от колонок table - то СУБД имеет право произвести оптимизацию - вычислить some_expr() один раз и мемоизировать.
Рассматривать rand() следует НЕзависимым от table. но зависимым от его состояния.
Формально может быть и так и так...
Хороший, темный вопрос неопоределённой семантики
no subject
случайная выборка сформировалась (в отличие от mssql) но не отсортировалась. Сортировки удалось добиться если:
"escapist: работает только если умножить и поделить на одну и ту же колонку" (это лично я не проверял). Закину вопросец на форум поддержки сайбейза, послушаю что ответят.
no subject
no subject
(Anonymous) 2010-09-04 04:28 pm (UTC)(link)rand()-как в MS SQL Server
rand2()- Все нормально! И на каждую строчку новое значение, и сортировка работает!!!
no subject
0.002197332682271798
0.003631702627643666
0.003784295175023652
0.003997924741355632
0.0051576281014435255
0.0053102206488235115
0.007080294198431349
0.007354960783715323
0.008514664143803218
0.009216589861751152
0.00933866389965514
0.00933866389965514
0.009674367503891109
0.010498367259743034
0.011871700186162907
0.01455732902005066
0.015106662190618611
0.015259254737998596
0.016785180211798457
Pervasive 9.5.0077.002