W PostgreSQL random()
funkcja zwraca pseudolosową wartość z zakresu 0,0 <=x <1,0.
Wykorzystuje prosty liniowy algorytm kongruencji, który jest jednym z najstarszych i najlepiej znanych algorytmów generatora liczb pseudolosowych.
Liczba pseudolosowa to liczba, która wydaje się być losowa, ale tak naprawdę nie jest losowa. Liczba pseudolosowa nie jest tak naprawdę losowa, ponieważ jej wartość została wygenerowana przez znane ziarno. Jednak wydaje się, że jest losowy, jeśli użytkownik nie ma wiedzy o źródle lub algorytmie, który go utworzył.
Dlatego liczby pseudolosowe są często uważane za wystarczająco dobre dla wielu zastosowań.
Przykład
Oto przykład generowania liczby pseudolosowej za pomocą random()
funkcja.
SELECT random();
Wynik:
0.625357600199532
Wynik będzie oczywiście inny za każdym razem, gdy to nazwiesz.
Oto kolejny przykład, w którym trzy razy wywołuję funkcję w tej samej instrukcji.
SELECT
random(),
random(),
random();
Wynik:
random | random | random -------------------+---------------------+-------------------- 0.594431747016209 | 0.22816249693650903 | 0.7168820259873314
Liczba losowa od 1 do 10
Oto przykład generowania liczby dodatniej od 0 do 10.
SELECT random() * 10 + 1;
Wynik:
4.564859004063727
Żeby było jasne, generuje to losową liczbę, która jest>=1 i <10.
Losowa liczba całkowita
Możesz użyć funkcji takiej jak trunc()
lub floor()
aby zwrócić liczbę losową jako liczbę całkowitą.
SELECT
trunc(random() * 10 + 1),
floor(random() * 10 + 1);
Wynik:
trunc | floor -------+------- 1 | 8
Zwróć losowe wiersze
Możesz użyć random()
w ORDER BY
klauzula zapytania bazy danych, aby zwrócić losowe wiersze.
Oto przykład, który wysyła zapytanie do pagili przykładowa baza danych.
SELECT
film_id,
title
FROM film
ORDER BY random() LIMIT 5;
Wynik:
film_id | title ---------+--------------------- 116 | CANDIDATE PERDITION 806 | SLEEPY JAPANESE 892 | TITANIC BOONDOCK 826 | SPEED SUIT 612 | MUSSOLINI SPOILERS
A oto, co otrzymam, jeśli uruchomię go ponownie:
film_id | title ---------+-------------------- 450 | IDOLS SNATCHERS 827 | SPICE SORORITY 593 | MONTEREY LABYRINTH 529 | LONELY ELEPHANT 591 | MONSOON CAUSE
Jeśli masz dużą tabelę i chcesz zwrócić wszystkie wiersze (lub wiele wierszy), możesz zmodyfikować zapytanie w taki sposób:
SELECT *
FROM film
WHERE film_id IN
(SELECT film_id FROM film ORDER BY random() LIMIT 5);
Twórz powtarzalne liczby losowe
Postgres ma również funkcję setseed()
funkcja, która pozwala ustawić ziarno dla kolejnych random()
połączeń w ramach tej samej sesji.
Możesz użyć setseed()
do generowania powtarzalnych random()
połączeń.
Zobacz, jak działa Setseed() w Postgresie, aby zapoznać się z przykładami.