SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Como o SQLite Random() funciona


O SQLite random() A função retorna um número inteiro pseudo-aleatório entre -9223372036854775808 e +9223372036854775807.

Um número pseudo-aleatório é um número que parece ser aleatório, mas não é verdadeiramente aleatório. Um número pseudo-aleatório não é verdadeiramente aleatório porque seu valor foi gerado por uma semente conhecida. No entanto, um número pseudo-aleatório parecerá aleatório se o usuário não tiver conhecimento da semente ou do algoritmo que o criou.

Portanto, números pseudo-aleatórios geralmente são considerados bons o suficiente para muitas aplicações.

Exemplo


Aqui está um exemplo de geração de um número pseudo-aleatório com o random() função.
SELECT random();

Resultado:
-882536775989953141

Somente valores positivos


Você pode combinar random() com abs() para gerar apenas valores positivos.
SELECT abs(random());

Neste caso, se random() gera um valor negativo, abs() retornará o valor absoluto.

Para demonstrar como abs() funciona, eis o que acontece se eu passar o número aleatório (negativo) do primeiro exemplo para o abs() função:
SELECT abs(-882536775989953141);

Resultado:
882536775989953141

Então, se passarmos random() para abs() , e random() gera um valor negativo, abs() retornará esse valor como um valor positivo.

Valor entre 0 e 100


Aqui está um exemplo de geração de um número positivo entre 0 e 100.
SELECT abs(random() % 100);

Aqui está um exemplo de seleção de vários valores aleatórios.
SELECT 
  abs(random() % 100) AS R1,
  abs(random() % 100) AS R2,
  abs(random() % 100) AS R3;

Resultado:
R1          R2          R3        
----------  ----------  ----------
17          79          90        

Retornar linhas aleatórias


Você pode usar random() em um ORDER BY cláusula de uma consulta de banco de dados para retornar linhas aleatórias.

Aqui está um exemplo.
SELECT * FROM Artist 
ORDER BY random() LIMIT 5;

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

E aqui está o que eu recebo se eu executá-lo novamente:
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 você tiver uma tabela grande, talvez queira modificar sua consulta para algo assim:
SELECT * FROM Artist 
WHERE ArtistId IN 
  (SELECT ArtistId FROM Artist ORDER BY random() LIMIT 5);

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