Поведение запроса
Народ, а гляньте в разных СУБД, что покажет такой запрос?
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
select some_expr() from table вызывается на каждую строчку заново.
Но если выражение не зависит от колонок table - то СУБД имеет право произвести оптимизацию - вычислить some_expr() один раз и мемоизировать.
Рассматривать rand() следует НЕзависимым от table. но зависимым от его состояния.
Формально может быть и так и так...
Хороший, темный вопрос неопоределённой семантики