Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / выбор случайной записи, взвешенной коэффициентом / 8 сообщений из 8, страница 1 из 1
17.03.2004, 01:28
    #32444551
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор случайной записи, взвешенной коэффициентом
посоветуйте красивое решение, как можно выбрать случайную запись из таблицы

banner
======
idbanner bigint
banner blob
koeff smallint

, чтобы частота встречаемости определялась коэффициентом....

хотя бы для упрощенного случая, когда точно известно, что сумма всех коэффициентов select sum("koeff") from "banner" равна 100
...
Рейтинг: 0 / 0
17.03.2004, 04:57
    #32444584
Andrew Kruchinin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор случайной записи, взвешенной коэффициентом
Вот такая ХП не подойдет?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
C=RANDOM( 100 );
FOR SELECT IDBANNER, BANNER, KOEFF
      FROM BANNER
      INTO :IDBANNER, :BANNER, :KOEF
      ORDER BY KOEFF
DO
 BEGIN
  IF (C<KOEFF) THEN
    BEGIN
      SUSPEND;
      EXIT;
    END
 END


Или некрасиво? :-)
...
Рейтинг: 0 / 0
17.03.2004, 09:25
    #32444718
rst
rst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор случайной записи, взвешенной коэффициентом
/topic/80810
...
Рейтинг: 0 / 0
17.03.2004, 10:43
    #32444895
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор случайной записи, взвешенной коэффициентом
>fedd

Общий алгоритм для общего, а не упрощенного, случая (реализация - ХП).
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
R=RANDOM( 100 )
K= 100 /(SELECT SUM(koeff) FROM banner)
B= 0 
FOR SELECT ... INTO :koeff DO BEGIN
  B=B+koeff*K 
  IF (R<=B) THEN BEGIN
     <то, что надо. выходим>
     END
  END


>Andrew Kruchinin
>Или некрасиво? :-)

Не то, чтобы некрасиво, но неправильно однозначно :)
...
Рейтинг: 0 / 0
17.03.2004, 11:07
    #32444980
Andrew Kruchinin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор случайной записи, взвешенной коэффициентом
Не то, чтобы некрасиво, но неправильно однозначно :)

Упс, понял :-) Самому было интересно, но ночью как-то упустил некоторые моменты из виду. Да, это думаю то что надо человеку, хотя ему решать. Зато там в MS SQL такие таблицы строятся, с нормальными распределениями и т.д. Ужас просто, аж страшно.
...
Рейтинг: 0 / 0
17.03.2004, 11:22
    #32445021
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор случайной записи, взвешенной коэффициентом
спасибо!

Johnmen, круто! :) а order by koeff в твоем случае не нужен? (мне пока мозгов с утра не хватает осмыслить..)
...
Рейтинг: 0 / 0
17.03.2004, 11:28
    #32445038
Andrew Kruchinin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор случайной записи, взвешенной коэффициентом
В данном случае сортировка пофиг. Собственно я где-то к этому и шел, потому сортировку и включил. Только вот где-то на задворках маячила мысль что где-то что-то не так, но настолько неявная что ее остальные мысли задавили. Но безусловно последний вариант верный в любом случае.
...
Рейтинг: 0 / 0
17.03.2004, 11:30
    #32445045
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор случайной записи, взвешенной коэффициентом
>fedd

Совершенно верно. Не нужен :)
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / выбор случайной записи, взвешенной коэффициентом / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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