SQLite
 sql >> Database >  >> RDS >> SQLite

Come funziona SQLite Random()

SQLite random() la funzione restituisce un numero intero pseudocasuale compreso tra -9223372036854775808 e +9223372036854775807.

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, un numero pseudo-casuale 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:

-882536775989953141

Solo valori positivi

Puoi combinare random() con abs() generare solo valori positivi.

SELECT abs(random());

In questo caso, se random() genera un valore negativo, abs() restituirà invece il valore assoluto.

Per dimostrare come abs() funziona, ecco cosa succede se passo il numero casuale (negativo) dal primo esempio a abs() funzione:

SELECT abs(-882536775989953141);

Risultato:

882536775989953141

Quindi se passiamo random() a abs() e random() genera un valore negativo, abs() restituirà quel valore come un valore positivo.

Valore compreso tra 0 e 100

Ecco un esempio di generazione di un numero positivo compreso tra 0 e 100.

SELECT abs(random() % 100);

Ecco un esempio di selezione di più valori casuali.

SELECT 
  abs(random() % 100) AS R1,
  abs(random() % 100) AS R2,
  abs(random() % 100) AS R3;

Risultato:

R1          R2          R3        
----------  ----------  ----------
17          79          90        

Restituisci righe casuali

Puoi usare random() in un ORDER BY clausola di una query del database per restituire righe casuali.

Ecco un esempio.

SELECT * FROM Artist 
ORDER BY random() LIMIT 5;

Risultato:

ArtistId    Name                                    
----------  ----------------------------------------
131         Smashing Pumpkins                       
127         Red Hot Chili Peppers                   
169         Black Eyed Peas                         
60          Santana Feat. Dave Matthews             
240         Gustav Mahler                           

Ed ecco cosa ottengo se lo eseguo di nuovo:

ArtistId    Name                                    
----------  ----------------------------------------
234         Orchestra of The Age of Enlightenment   
126         Raul Seixas                             
76          Creedence Clearwater Revival            
182         Nega Gizza                              
63          Santana Feat. Lauryn Hill & Cee-Lo      

Se hai una tabella di grandi dimensioni, potresti voler modificare la tua query in qualcosa del genere:

SELECT * FROM Artist 
WHERE ArtistId IN 
  (SELECT ArtistId FROM Artist ORDER BY random() LIMIT 5);

Risultato:

ArtistId    Name                                    
----------  ----------------------------------------
45          Sandra De Sá                            
105         Men At Work                             
110         Nirvana                                 
205         Chris Cornell                           
267         Göteborgs Symfoniker & Neeme Järvi