Nie za bardzo bo jedną z wad mysql jest to że nie ma on typów tablicowych.
W zasadzie żadna z tych funkcji nie zwraca tablicy.
Potrzebna by nam była funkcja która ze skalara zwróci tablice.
No chyba że taką funkcję można napisać samemu wtedy można byłoby napisać sobie generate_series() i mój przykład zadziałby normalnie lub z drobnymi modyfikacjami.
Jeszcze jeden pomysł:
Może zmodyfikujesz strukturę bazy tak żeby umożliwić zapytanie w inny sposób ?
Tzn. wiadomo że suma prawdopodobieństw to jest 1.
funkcja rand() w mysql zwraca liczbę od 0..1 (float)
Należałoby podzielić ten '1' przez sumę wszystkich punktów i proporcjonalnie każdemu rekordowi przydzielić jakiś odcinek na osi od 0..1
np jeśli suma wszystkich punktów w bazie to 30 to dla pierwszego rekordu przedział na osi to: [0..4/30] (bo tyle ma punktów) następny rekord ma od (4/30..11/30) dalej (11/30..12/30) itd
id | punkty | lewa granica | prawa_granica
1 4 0 4/30
2 7 4 11/30
...
i wtedy miałbyś zapytanie takie:
SELECT *, rand() FROM tabela HAVING rand() >= lewa_granica AND rand() <= prawa_granica