sql >> Databáze >  >> RDS >> SQLite

Jak funguje SQLite Random()

SQLite random() funkce vrací pseudonáhodné celé číslo mezi -9223372036854775808 a +9223372036854775807.

Pseudonáhodné číslo je číslo, které se zdá být náhodné, ale ve skutečnosti náhodné není. Pseudonáhodné číslo není skutečně náhodné, protože jeho hodnota byla vygenerována známým zdrojem. Pseudonáhodné číslo se však bude jevit jako náhodné, pokud uživatel nezná seed nebo algoritmus, který jej vytvořil.

Proto jsou pseudonáhodná čísla často považována za dostatečně dobrá pro mnoho aplikací.

Příklad

Zde je příklad generování pseudonáhodného čísla pomocí random() funkce.

SELECT random();

Výsledek:

-882536775989953141

Pouze kladné hodnoty

random() můžete kombinovat pomocí abs() generovat pouze kladné hodnoty.

SELECT abs(random());

V tomto případě, pokud random() vygeneruje zápornou hodnotu abs() místo toho vrátí absolutní hodnotu.

Ukázat, jak abs() funguje, toto se stane, když předám (záporné) náhodné číslo z prvního příkladu do abs() funkce:

SELECT abs(-882536775989953141);

Výsledek:

882536775989953141

Pokud tedy předáme random() na abs() a random() vygeneruje zápornou hodnotu abs() vrátí tuto hodnotu jako kladnou hodnotu.

Hodnota mezi 0 a 100

Zde je příklad generování kladného čísla mezi 0 a 100.

SELECT abs(random() % 100);

Zde je příklad výběru více náhodných hodnot.

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

Výsledek:

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

Vrátit náhodné řádky

Můžete použít random() v ORDER BY klauzule databázového dotazu pro vrácení náhodných řádků.

Zde je příklad.

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

Výsledek:

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

A tady je to, co dostanu, když to znovu spustím:

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      

Pokud máte velkou tabulku, možná budete chtít upravit svůj dotaz na něco takového:

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

Výsledek:

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

  1. Příkaz SUBSTRING v SQL:Primer

  2. Hibernate oracle sekvence produkuje velkou mezeru

  3. Úvod do zabezpečení na úrovni řádků v SQL Server

  4. Funkce ATAN2() v Oracle