powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сортировка по RAND()
17 сообщений из 67, страница 3 из 3
Сортировка по RAND()
    #39632687
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HommerМне, как пользователю, важно чтобы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SET GENERATOR G TO 0;

SELECT *
FROM (
  SELECT 
    GEN_ID(G, 1) as GenValue,
    ID
  FROM Test)
WHERE mod(GenValue, 2) = 0

не возвращало: "3, 5, 7, 9, 11" вместо положенных "2, 4, 6, 8, 10"
Довольно необычно увидеть такое, согласитесь.
И в связи с этим, как переписать
Код: sql
1.
select F1(P1), sum(F2(P2)) from T group by 1

чтобы F1 и F2 вызывались только по одному разу на каждую запись из T?
...
Рейтинг: 0 / 0
Сортировка по RAND()
    #39632688
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hommer,

ты от вопроса то не уходи. Там не всё так очевидно как ты думаешь, потому что во многих случаях предикаты пробрасываются внутрь Derived Table и это хорошо
...
Рейтинг: 0 / 0
Сортировка по RAND()
    #39632692
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисHommer,

ты от вопроса то не уходи. Там не всё так очевидно как ты думаешь, потому что во многих случаях предикаты пробрасываются внутрь Derived Table и это хорошо
Я понял что там не очевидно. Оба варианта хороши при своих условиях. Причём в каких-то случаях правильно дать это на откуп оптимизатору, а в каких-то нужно иметь возможность сказать чтобы выполнилось как есть.
...
Рейтинг: 0 / 0
Сортировка по RAND()
    #39632696
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hommer,

а вы про вопрос с группировкой что думаете? Он решаемый?
...
Рейтинг: 0 / 0
Сортировка по RAND()
    #39632706
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hommer,

Тебе workaround придумать ли ты хочешь чтобы оптимизатор сам догадался. По поводу второго это не ко мне.
...
Рейтинг: 0 / 0
Сортировка по RAND()
    #39632738
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисТебе workaround придумать ли ты хочешь чтобы оптимизатор сам догадался.
workaround. И не мне, а всем.
...
Рейтинг: 0 / 0
Сортировка по RAND()
    #39632743
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hommer,

точно такая плюха через UNION ALL (кстати еле вспомнил про неё, помниться Таблоид где-то с этим извращался). Сам попробуй
...
Рейтинг: 0 / 0
Сортировка по RAND()
    #39632744
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hommerworkaround. И не мне, а всем.

Запомнить, что любое выражение в запросе может вычисляться непредсказуемое число раз и не
использовать недетерминированные функции где попало.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сортировка по RAND()
    #39632746
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алгоритмическая хрень должна писаться в процедуре алгоритмически.
Запрос же - описание, что бы хотелось получить, без описания алгоритма.
...
Рейтинг: 0 / 0
Сортировка по RAND()
    #39632761
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HommerИ в связи с этим, как переписать
Код: sql
1.
select F1(P1), sum(F2(P2)) from T group by 1

чтобы F1 и F2 вызывались только по одному разу на каждую запись из T?
Так и не получается сделать одним запросом.
Такое тоже вызывает по нескольку раз:
Код: sql
1.
2.
with TT as (select F1(P1) FF1, F2(P1) FF2 from T)
select FF1, sum(FF2) from TT group by 1



Единственное пока что точно работает:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
execute block returns (FF1 bigint, FF2 bigint) as

  declare procedure TT returns (F1 bigint, F2 bigint) as
  begin
    for select F1(P1), F2(P2) from test into F1, F2 do
      suspend;
  end

begin
  for select F1, sum(F2) from TT group by 1 into :FF1, :FF2 do
    suspend;
end;
...
Рейтинг: 0 / 0
Сортировка по RAND()
    #39632789
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryДегтярев Евгенийраз дергаем 100 и мешаем как угодно, не напрягая ни сеть не сервер )В условии не описано, что надо получить 100 фоток утром и весь день 20 случайных из них показывать, время от времени перетасовывая.
И что-то мне подсказывает, что так задача не стоит.
Получение свежих данных в 5 раз эффективнее на сервере.
ситуации разные бывают, одно дело если надо раз в минуту, другое если сотню другую в секунду
...
Рейтинг: 0 / 0
Сортировка по RAND()
    #39632812
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hommer,

т.е. мой пример с unuin all ты не смотрел

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with TT as (
  select 
     F1(P1) as FF1, 
     F2(P1) as FF2 
  from T
  union all
  select null, null from rdb$database where false
)
select FF1, sum(FF2) 
from TT 
group by 1
...
Рейтинг: 0 / 0
Сортировка по RAND()
    #39632816
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

работает :)
В доку не стыдно будет добавить этот workaround? :) Или правильней "не стрёмно?" :)
...
Рейтинг: 0 / 0
Сортировка по RAND()
    #39632861
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barry> Даже если генератор рассматривать без привязки к таблице (к полю ID).
barry> А просто как некую внутреннюю переменную. Это данные базы данных.
barry> Такое же, как и содержимое таблиц, просто неструктурированное.

Да, Боря сегодня в ударе. Давно, видимо, шашку в руки не брал, заржавела уже. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сортировка по RAND()
    #39632885
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barryМимопроходящий,
> СЕГОДНЯ ПРОСТО ПРАЗДНИК КАКОЙ-ТО!
А почему бы не праздник, кто еще может устроить настоящий праздник? :)
Я так интерпретирую транзакцию. Попробуй мне доказать обратное. Даже если генератор рассматривать без привязки к таблице (к полю ID). А просто как некую внутреннюю переменную. Это данные базы данных. Такое же, как и содержимое таблиц, просто неструктурированное. Почему на него не должны воздействовать правила транзакции?

Хочется устроить очередь за ID? Чтобы следующий мог его получить только когда предыдущий закоммитится/отроллбачится? Так флаг тебе в руки, сделай табличку и раздавай из неё таким манером. А кому быстро нужны синтетические ключи и пофиг сколько их ушло в помойку поскольку раздумали использовать, будут пользоваться внетранзакционными генераторами.
...
Рейтинг: 0 / 0
Сортировка по RAND()
    #39632893
Фотография barry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка,
> Хочется устроить очередь за ID?
Не надо отвлекаться от темы, генераторы проехали когда еще Абрамсы на IB бегали. Провокация никогда не помешает для поднятия настроения. :)
...
Рейтинг: 0 / 0
Сортировка по RAND()
    #39633020
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это из серии "небольшой утренний бан успокаивает модератора и настраивает на добродушный лад"
...
Рейтинг: 0 / 0
17 сообщений из 67, страница 3 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сортировка по RAND()
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]