SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Wie SQLite Random() funktioniert

Das SQLite random() Funktion gibt eine Pseudozufallszahl zwischen -9223372036854775808 und +9223372036854775807 zurück.

Eine Pseudozufallszahl ist eine Zahl, die zufällig erscheint, aber nicht wirklich zufällig ist. Eine Pseudozufallszahl ist nicht wirklich zufällig, da ihr Wert von einem bekannten Seed generiert wurde. Eine Pseudozufallszahl erscheint jedoch zufällig, wenn der Benutzer keine Kenntnis von dem Seed oder Algorithmus hat, der sie erstellt hat.

Daher werden Pseudozufallszahlen für viele Anwendungen oft als gut genug angesehen.

Beispiel

Hier ist ein Beispiel für die Generierung einer Pseudozufallszahl mit random() Funktion.

SELECT random();

Ergebnis:

-882536775989953141

Nur positive Werte

Sie können random() kombinieren mit abs() um nur positive Werte zu generieren.

SELECT abs(random());

In diesem Fall, wenn random() erzeugt einen negativen Wert, abs() gibt stattdessen den absoluten Wert zurück.

Um zu demonstrieren, wie abs() funktioniert, Folgendes passiert, wenn ich die (negative) Zufallszahl aus dem ersten Beispiel an abs() übergebe Funktion:

SELECT abs(-882536775989953141);

Ergebnis:

882536775989953141

Wenn wir also random() übergeben zu abs() , und random() erzeugt einen negativen Wert, abs() gibt diesen Wert als positiven Wert zurück.

Wert zwischen 0 und 100

Hier ist ein Beispiel für die Generierung einer positiven Zahl zwischen 0 und 100.

SELECT abs(random() % 100);

Hier ist ein Beispiel für die Auswahl mehrerer zufälliger Werte.

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

Ergebnis:

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

Zufällige Zeilen zurückgeben

Sie können random() verwenden in einem ORDER BY Klausel einer Datenbankabfrage, um zufällige Zeilen zurückzugeben.

Hier ist ein Beispiel.

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

Ergebnis:

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

Und hier ist, was ich bekomme, wenn ich es erneut ausführe:

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      

Wenn Sie eine große Tabelle haben, möchten Sie Ihre Abfrage vielleicht so ändern:

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

Ergebnis:

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