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 08:48 am (UTC)
From: [identity profile] 184467440737095.livejournal.com
mysql отсортировал случайные числа по возрастанию.

Date: 2010-09-03 08:51 am (UTC)
From: [identity profile] craneop.livejournal.com
a
0.0192578518942537
0.2605017761332
0.945262504690571

MySQL

Date: 2010-09-03 08:52 am (UTC)
From: [identity profile] honeyman.livejournal.com
PostgreSQL 8.4.4:
0.0628892714157701
0.272270571440458
0.291923750657588
0.433800493832678
0.604293675161898
0.610119560733438
0.694576141890138
0.755003112833947

SQLite 3.7.2:
-3423746492705505593
-1151830632242196188
-4895362827993576501
5130108326149233244
3980505363568550580
3074617528699226538
-7403263901897847004
6293708936006779411
-2917952153408722454
-4668168712340694905
665594589023414259
-8204040720926507797
9128407528424789357
4885620583458867990
-254562513299929267
2635112400891454653

Date: 2010-09-03 08:54 am (UTC)
From: [identity profile] craneop.livejournal.com
MySQL, PostgreSQL :) Отлично. Сча выявим все недобазы.

Date: 2010-09-03 08:53 am (UTC)
From: [identity profile] cnsr.livejournal.com
ORACLE 10g
-1681682900
-1570261554
448989160
888323830
902538527
1006354456
1546290389

Date: 2010-09-03 08:55 am (UTC)
From: [identity profile] craneop.livejournal.com
Так. Oracle в список.

Date: 2010-09-03 08:56 am (UTC)
From: [identity profile] metaclass.livejournal.com
Так оракл вроде все правильно показывает.

Date: 2010-09-03 08:58 am (UTC)
From: [identity profile] craneop.livejournal.com
Так список ПРАВИЛЬНЫХ СУБД то! :)

Date: 2010-09-03 08:57 am (UTC)
From: [identity profile] plumqqz.livejournal.com
Постгрес:
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

сортировано

Date: 2010-09-03 09:01 am (UTC)
From: [identity profile] metaclass.livejournal.com
О блин, оракл забавно. Я бы такое рассматривал как два разных вызова рандом, а не обращение к одному.

Date: 2010-09-03 09:02 am (UTC)
From: [identity profile] plumqqz.livejournal.com
Ну, Вы не оракл.
Вы order by 1 покажите, кстати.

Date: 2010-09-03 09:04 am (UTC)
From: [identity profile] metaclass.livejournal.com
Да то же самое - с rand() не сортирует.

И вдогонку

Date: 2010-09-03 09:03 am (UTC)
From: [identity profile] plumqqz.livejournal.com
Оракл select dbms_random.value from all_objects where rownum<10 order by 1*dbms_random.value не сортирует, что логично.

Re: И вдогонку

Date: 2010-09-03 09:14 am (UTC)
From: [identity profile] plumqqz.livejournal.com
По-моему, абсолютно логично.
постгрес
select random() as a from generate_series(1,10) order by random()*1
тоже не сортирует.

Date: 2010-09-03 09:05 am (UTC)
From: [identity profile] predatorre.livejournal.com
MS SQL

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

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()), хотя некоторые пуристы морщат от этого носик.

Date: 2010-09-03 09:16 am (UTC)
From: [identity profile] guamoka.livejournal.com
Не в тему. Т.е., не в эту тему:-)

на запрос

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 отрабатывает нормально

ЗЫ. Все бросил и побежал репортить баг. Ога.

Date: 2010-09-03 09:21 am (UTC)
From: [identity profile] guamoka.livejournal.com
Тебе муахаха. А вот так куячишь запросы в поте лица, тебе в затылок дышат, когда готово будет?! а оно хрясь, и пополам.

Date: 2010-09-03 09:23 am (UTC)
From: [identity profile] guamoka.livejournal.com
Поэтому у меня стоит для работы:
TOra,
SQL Developer,
SQuirrel

%-)

И это, считай, я по большому счету не работаю. Так, по верхам SQL\DBA.

Date: 2010-09-03 09:26 am (UTC)
From: [identity profile] metaclass.livejournal.com
Хехех. А вот я для таких целей использую самописанный тул, по совместительству являющийся гуем для юзеров, поэтому он вылизан по максимуму.
А скрипты консольным тулом запускаю.

Жаба же

Date: 2010-09-03 10:39 am (UTC)
From: [identity profile] plumqqz.livejournal.com
Из Назарета разве может быть что доброе?

Date: 2010-09-03 10:44 am (UTC)
From: [identity profile] fd979.livejournal.com
Oracle 10g, RHEL 4.5 (на всяк)

-2115078253
-745643079
-448782669
-203839498
-72273143
1606308000

Date: 2010-09-03 12:52 pm (UTC)
From: [identity profile] ex-svinonra.livejournal.com
MS SQL Server 10.0.1600

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
Edited Date: 2010-09-03 12:54 pm (UTC)

Date: 2010-09-03 07:59 pm (UTC)
From: [identity profile] zamotivator.livejournal.com
По стандарту он должен вызвать rand() столько раз, сколько строк в таблице some_table, а потом тосортировать результаты вызовов по возрастанию.
Если это не так - то это баг оптимизатора

Date: 2010-09-03 08:03 pm (UTC)
From: [identity profile] zamotivator.livejournal.com
Хотя не.
select some_expr() from table вызывается на каждую строчку заново.
Но если выражение не зависит от колонок table - то СУБД имеет право произвести оптимизацию - вычислить some_expr() один раз и мемоизировать.
Рассматривать rand() следует НЕзависимым от table. но зависимым от его состояния.
Формально может быть и так и так...
Хороший, темный вопрос неопоределённой семантики

Date: 2010-09-04 06:01 am (UTC)
From: [identity profile] alexeyk77.livejournal.com
Проверил для sybase sa10 (не ase), а комрады с sql.ru подтвердили аналогичное поведение для последней версии - sa12:
случайная выборка сформировалась (в отличие от mssql) но не отсортировалась. Сортировки удалось добиться если:
"escapist: работает только если умножить и поделить на одну и ту же колонку" (это лично я не проверял). Закину вопросец на форум поддержки сайбейза, послушаю что ответят.

Date: 2010-09-04 06:56 am (UTC)
From: [identity profile] alexeyk77.livejournal.com
ASE 15.5 ESD#1 - как и у MSSQL (одна и та-же случайная величина)

Date: 2010-09-04 04:28 pm (UTC)
From: (Anonymous)
В Sybase ASE 15.5, Есть две функции rand() и rand2().
rand()-как в MS SQL Server
rand2()- Все нормально! И на каждую строчку новое значение, и сортировка работает!!!

Date: 2010-09-04 08:45 pm (UTC)
From: [identity profile] c-a-s-u-s.livejournal.com
9.765923032319102E-4
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

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. 25th, 2025 12:10 am
Powered by Dreamwidth Studios