SQLite
 sql >> Base de données >  >> RDS >> SQLite

Comment fonctionne SQLite Random()

Le SQLite random() renvoie un entier pseudo-aléatoire compris entre -9223372036854775808 et +9223372036854775807.

Un nombre pseudo-aléatoire est un nombre qui semble être aléatoire, mais qui n'est pas vraiment aléatoire. Un nombre pseudo-aléatoire n'est pas vraiment aléatoire car sa valeur a été générée par une graine connue. Cependant, un nombre pseudo-aléatoire apparaîtra comme aléatoire si l'utilisateur n'a aucune connaissance de la graine ou de l'algorithme qui l'a créé.

Par conséquent, les nombres pseudo-aléatoires sont souvent considérés comme suffisants pour de nombreuses applications.

Exemple

Voici un exemple de génération d'un nombre pseudo-aléatoire avec le random() fonction.

SELECT random();

Résultat :

-882536775989953141

Valeurs positives uniquement

Vous pouvez combiner random() avec abs() pour ne générer que des valeurs positives.

SELECT abs(random());

Dans ce cas, si random() génère une valeur négative, abs() renverra la valeur absolue à la place.

Pour démontrer comment abs() fonctionne, voici ce qui se passe si je passe le nombre aléatoire (négatif) du premier exemple au abs() fonction :

SELECT abs(-882536775989953141);

Résultat :

882536775989953141

Donc, si nous passons random() à abs() , et random() génère une valeur négative, abs() renverra cette valeur sous forme de valeur positive.

Valeur entre 0 et 100

Voici un exemple de génération d'un nombre positif entre 0 et 100.

SELECT abs(random() % 100);

Voici un exemple de sélection de plusieurs valeurs aléatoires.

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

Résultat :

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

Renvoyer des lignes aléatoires

Vous pouvez utiliser random() dans un ORDER BY clause d'une requête de base de données pour renvoyer des lignes aléatoires.

Voici un exemple.

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

Résultat :

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

Et voici ce que j'obtiens si je l'exécute à nouveau :

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      

Si vous avez une grande table, vous voudrez peut-être modifier votre requête en quelque chose comme ceci :

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

Résultat :

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