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?

questionAnswers(5)

yourAnswerToTheQuestion