In PostgreSQL, il random()
La funzione restituisce un valore pseudo-casuale nell'intervallo 0.0 <=x <1.0.
Utilizza un semplice algoritmo congruenziale lineare, che è uno dei più antichi e conosciuti algoritmi di generazione di numeri pseudocasuali.
Un numero pseudo-casuale è un numero che sembra essere casuale, ma non è veramente casuale. Un numero pseudo-casuale non è veramente casuale perché il suo valore è stato generato da un seme noto. Tuttavia, sembrerà casuale se l'utente non è a conoscenza del seme o dell'algoritmo che lo ha creato.
Pertanto, i numeri pseudocasuali sono spesso considerati abbastanza buoni per molte applicazioni.
Esempio
Ecco un esempio di generazione di un numero pseudo-casuale con random()
funzione.
SELECT random();
Risultato:
0.625357600199532
Il risultato sarà ovviamente diverso ogni volta che lo chiami.
Ecco un altro esempio in cui chiamo la funzione tre volte nella stessa istruzione.
SELECT
random(),
random(),
random();
Risultato:
random | random | random -------------------+---------------------+-------------------- 0.594431747016209 | 0.22816249693650903 | 0.7168820259873314
Numero casuale compreso tra 1 e 10
Ecco un esempio di generazione di un numero positivo compreso tra 0 e 10.
SELECT random() * 10 + 1;
Risultato:
4.564859004063727
Giusto per essere chiari, questo genera un numero casuale che è>=1 e <10.
Intero casuale
Puoi usare una funzione come trunc()
o floor()
per restituire il numero casuale come intero.
SELECT
trunc(random() * 10 + 1),
floor(random() * 10 + 1);
Risultato:
trunc | floor -------+------- 1 | 8
Restituisci righe casuali
Puoi usare random()
in un ORDER BY
clausola di una query del database per restituire righe casuali.
Ecco un esempio che interroga la pagila database di esempio.
SELECT
film_id,
title
FROM film
ORDER BY random() LIMIT 5;
Risultato:
film_id | title ---------+--------------------- 116 | CANDIDATE PERDITION 806 | SLEEPY JAPANESE 892 | TITANIC BOONDOCK 826 | SPEED SUIT 612 | MUSSOLINI SPOILERS
Ed ecco cosa ottengo se lo eseguo di nuovo:
film_id | title ---------+-------------------- 450 | IDOLS SNATCHERS 827 | SPICE SORORITY 593 | MONTEREY LABYRINTH 529 | LONELY ELEPHANT 591 | MONSOON CAUSE
Se hai una tabella di grandi dimensioni e devi restituire tutte le righe (o molte righe), potresti voler modificare la tua query in qualcosa del genere:
SELECT *
FROM film
WHERE film_id IN
(SELECT film_id FROM film ORDER BY random() LIMIT 5);
Crea numeri casuali ripetibili
Postgres ha anche un setseed()
funzione che ti consente di impostare un seme per il successivo random()
chiamate all'interno della stessa sessione.
Puoi usare setseed()
per generare random()
ripetibile chiamate.
Vedi come funziona Setseed() in Postgres per esempi.