En PostgreSQL, el random()
La función devuelve un valor pseudoaleatorio en el rango 0.0 <=x <1.0.
Utiliza un algoritmo congruencial lineal simple, que es uno de los algoritmos generadores de números pseudoaleatorios más antiguos y conocidos.
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, 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:
0.625357600199532
El resultado obviamente será diferente cada vez que lo llames.
Aquí hay otro ejemplo donde llamo a la función tres veces en la misma declaración.
SELECT
random(),
random(),
random();
Resultado:
random | random | random -------------------+---------------------+-------------------- 0.594431747016209 | 0.22816249693650903 | 0.7168820259873314
Número aleatorio entre 1 y 10
Este es un ejemplo de cómo generar un número positivo entre 0 y 10.
SELECT random() * 10 + 1;
Resultado:
4.564859004063727
Para que quede claro, esto genera un número aleatorio que es>=1 y <10.
Entero aleatorio
Puede usar una función como trunc()
o floor()
para devolver el número aleatorio como un entero.
SELECT
trunc(random() * 10 + 1),
floor(random() * 10 + 1);
Resultado:
trunc | floor -------+------- 1 | 8
Devolver filas aleatorias
Puedes usar random()
en un ORDER BY
cláusula de una consulta de base de datos para devolver filas aleatorias.
Aquí hay un ejemplo que consulta la pagila base de datos de ejemplo.
SELECT
film_id,
title
FROM film
ORDER BY random() LIMIT 5;
Resultado:
film_id | title ---------+--------------------- 116 | CANDIDATE PERDITION 806 | SLEEPY JAPANESE 892 | TITANIC BOONDOCK 826 | SPEED SUIT 612 | MUSSOLINI SPOILERS
Y esto es lo que obtengo si lo ejecuto de nuevo:
film_id | title ---------+-------------------- 450 | IDOLS SNATCHERS 827 | SPICE SORORITY 593 | MONTEREY LABYRINTH 529 | LONELY ELEPHANT 591 | MONSOON CAUSE
Si tiene una tabla grande y necesita devolver todas las filas (o muchas filas), es posible que desee modificar su consulta a algo como esto:
SELECT *
FROM film
WHERE film_id IN
(SELECT film_id FROM film ORDER BY random() LIMIT 5);
Crea números aleatorios repetibles
Postgres también tiene un setseed()
función que le permite establecer una semilla para posteriores random()
llamadas dentro de la misma sesión.
Puedes usar setseed()
para generar random()
repetibles llamadas.
Consulte Cómo funciona Setseed() en Postgres para ver ejemplos.