sql >> Base de Datos >  >> RDS >> SQLite

Cómo funciona SQLite Random()

SQLite random() La función devuelve un número entero pseudoaleatorio entre -9223372036854775808 y +9223372036854775807.

Un número pseudoaleatorio es un número que parece ser aleatorio, pero no es realmente aleatorio. Un número pseudoaleatorio no es verdaderamente aleatorio porque su valor fue generado por una semilla conocida. Sin embargo, un número pseudoaleatorio parecerá aleatorio si el usuario no conoce la semilla o el algoritmo que lo creó.

Por lo tanto, los números pseudoaleatorios a menudo se consideran lo suficientemente buenos para muchas aplicaciones.

Ejemplo

Aquí hay un ejemplo de cómo generar un número pseudoaleatorio con random() función.

SELECT random();

Resultado:

-882536775989953141

Solo valores positivos

Puedes combinar random() con abs() para generar solo valores positivos.

SELECT abs(random());

En este caso, si random() genera un valor negativo, abs() devolverá el valor absoluto en su lugar.

Para demostrar cómo abs() funciona, esto es lo que sucede si paso el número aleatorio (negativo) del primer ejemplo al abs() función:

SELECT abs(-882536775989953141);

Resultado:

882536775989953141

Entonces, si pasamos random() a abs() y random() genera un valor negativo, abs() devolverá ese valor como un valor positivo.

Valor entre 0 y 100

Este es un ejemplo de cómo generar un número positivo entre 0 y 100.

SELECT abs(random() % 100);

Este es un ejemplo de cómo seleccionar varios valores aleatorios.

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

Resultado:

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

Devolver filas aleatorias

Puedes usar random() en un ORDER BY cláusula de una consulta de base de datos para devolver filas aleatorias.

He aquí un ejemplo.

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                           

Y esto es lo que obtengo si lo ejecuto de nuevo:

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 tiene una tabla grande, es posible que desee modificar su consulta a algo como esto:

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