• ORDER BY `вероятность`?

    Qwertovsky
    @Qwertovsky
    Как подсказывают ниже запрос будет работать, если заменить знак = на знак <.
  • ORDER BY `вероятность`?

    Qwertovsky
    @Qwertovsky
    Нужна функция распределения вероятностей.
    Если принять за x длину очереди в туалет, то большему х будет соответствовать меньшая вероятность.
    Возьмите для примера распределение Пуассона с коэффициентом 1 (1^x * exp(-1)/factorial(x)). В этом случае меньшей длине очереди будет соответствовать большая вероятность.
    Дальше генерируете случайное число от 0 до 1. Для каждой строки из таблицы высчитываете по своей формуле эту «длину очереди в туалет» (привязалось, сами виноваты). Высчитываете вероятность по Пуассону. Сравниваете с «рандомным» числом с нужной точностью. Если есть совпавшие строки, добавляете в выборку. Очевидно, что совпадений будет больше там, где кривая вероятности распределения выше (длина очереди в туалет около 0) (см. график).
    Выражаясь языком SQL
    select  table1.*
            , power(1,your_x)*exp(-1)/factorial(your_x)
    from  table1
    where 1=1
          and round(dbms_random.value, 5)=round(power(1,your_x)*exp(-1)/factorial(your_x),5)

    Подзапрос для вычисления факториала опустил.
    Такой запрос не сработает, так как количество генераций случайного числа равно количеству строк в таблице. Количество генераций должно быть больше, что бы увидеть нужное распределение. Одним запросом, как мне кажется, не обойтись. Получится долго выполняемая процедура.
    Я бы пометил заранее нужный небольшой список, содержащий необходимые рестораны с нужным распределением (т.е. хороших ресторанов там будет больше). А из этого списка выводил «рандомно» необходимое число ресторанов.