sql >> Database >  >> RDS >> PostgreSQL

Hoe Random() werkt in PostgreSQL

In PostgreSQL is de random() functie retourneert een pseudo-willekeurige waarde in het bereik 0.0 <=x <1.0.

Het maakt gebruik van een eenvoudig lineair congruentieel algoritme, dat een van de oudste en bekendste algoritmen voor het genereren van pseudo-willekeurige getallen is.

Een pseudo-willekeurig getal is een getal dat willekeurig lijkt, maar niet echt willekeurig is. Een pseudo-willekeurig getal is niet echt willekeurig omdat de waarde is gegenereerd door een bekende seed. Het lijkt echter willekeurig te zijn als de gebruiker geen kennis heeft van het zaad of het algoritme dat het heeft gemaakt.

Daarom worden pseudo-willekeurige getallen voor veel toepassingen vaak als goed genoeg beschouwd.

Voorbeeld

Hier is een voorbeeld van het genereren van een pseudo-willekeurig getal met de random() functie.

SELECT random();

Resultaat:

0.625357600199532

Het resultaat zal natuurlijk elke keer dat je het aanroept anders zijn.

Hier is nog een voorbeeld waarbij ik de functie drie keer in dezelfde instructie aanroep.

SELECT 
  random(),
  random(),
  random();

Resultaat:

 random            | random              | random
-------------------+---------------------+--------------------
 0.594431747016209 | 0.22816249693650903 | 0.7168820259873314

Willekeurig getal tussen 1 en 10

Hier is een voorbeeld van het genereren van een positief getal tussen 0 en 10.

SELECT random() * 10 + 1;

Resultaat:

4.564859004063727

Voor alle duidelijkheid:dit genereert een willekeurig getal dat>=1 en <10 is.

Willekeurig geheel getal

U kunt een functie gebruiken zoals trunc() of floor() om het willekeurige getal terug te geven als een geheel getal.

SELECT 
  trunc(random() * 10 + 1),
  floor(random() * 10 + 1);

Resultaat:

 trunc | floor
-------+-------
     1 |     8

Retourneer willekeurige rijen

U kunt random() . gebruiken in een ORDER BY clausule van een databasequery om willekeurige rijen te retourneren.

Hier is een voorbeeld dat de pagila . doorzoekt voorbeelddatabase.

SELECT 
  film_id,
  title
FROM film 
ORDER BY random() LIMIT 5;

Resultaat:

 film_id |        title        
---------+---------------------
     116 | CANDIDATE PERDITION
     806 | SLEEPY JAPANESE
     892 | TITANIC BOONDOCK
     826 | SPEED SUIT
     612 | MUSSOLINI SPOILERS

En dit is wat ik krijg als ik het opnieuw doe:

 film_id |       title        
---------+--------------------
     450 | IDOLS SNATCHERS
     827 | SPICE SORORITY
     593 | MONTEREY LABYRINTH
     529 | LONELY ELEPHANT
     591 | MONSOON CAUSE

Als je een grote tabel hebt en je moet alle rijen (of veel rijen) teruggeven, wil je misschien je zoekopdracht wijzigen in iets als dit:

SELECT *
FROM film 
WHERE film_id IN 
  (SELECT film_id FROM film ORDER BY random() LIMIT 5);

Herhaalbare willekeurige getallen maken

Postgres heeft ook een setseed() functie waarmee u een seed kunt instellen voor volgende random() oproepen binnen dezelfde sessie.

U kunt setseed() . gebruiken om herhaalbare random() te genereren oproepen.

Zie Hoe Setseed() werkt in Postgres voor voorbeelden.


  1. SUM() Functie in MySQL

  2. pip install mislukt met /usr/bin/clang:Geen dergelijk bestand of map

  3. EM12c staat nu DB12c toe voor repo's

  4. Een handvat krijgen voor native Oracle Connection in Hibernate 4 om een ​​opgeslagen proces uit te voeren