Выберите случайную строку из таблицы 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}
Есть идеи?