Выберите случайную строку из таблицы PostgreSQL с весовой вероятностью строки

Пример ввода:

SELECT * FROM test;
 id | percent   
----+----------
  1 | 50 
  2 | 35   
  3 | 15   
(3 rows)

Как бы вы написали такой запрос, чтобы в среднем 50% времени я мог получить строку с id = 1, 35% строки времени с id = 2 и 15% строки времени с id = 3?

Я пробовал что-то вродеSELECT id FROM test ORDER BY p * random() DESC LIMIT 1, но это дает неправильные результаты. После 10000 прогонов я получаю дистрибутив вроде:{1=6293, 2=3302, 3=405}, но я ожидал, что распределение будет почти:.{1=5000, 2=3500, 3=1500}

Есть идеи?

Ответы на вопрос(5)

Ваш ответ на вопрос