Wybierz losowy wiersz z tabeli PostgreSQL z ważonymi prawdopodobieństwami wierszy
Przykładowe dane wejściowe:
SELECT * FROM test; id | percent ----+---------- 1 | 50 2 | 35 3 | 15 (3 rows)
Jak napisałbyś takie zapytanie, że średnio 50% czasu mógłbym uzyskać wiersz o id = 1, 35% wiersza czasu o id = 2 i 15% wiersza czasu o id = 3?
Próbowałem czegoś takiegoSELECT id FROM test ORDER BY p * random() DESC LIMIT 1
, ale daje złe wyniki. Po 10 000 uruchomieniach otrzymuję dystrybucję, taką jak:{1=6293, 2=3302, 3=405}
, ale spodziewałem się, że dystrybucja będzie prawie:{1=5000, 2=3500, 3=1500}
.
Jakieś pomysły?