In PostgreSQL das random()
-Funktion gibt einen Pseudozufallswert im Bereich 0,0 <=x <1,0 zurück.
Es verwendet einen einfachen linearen kongruenten Algorithmus, der einer der ältesten und bekanntesten Algorithmen zur Erzeugung von Pseudozufallszahlen ist.
Eine Pseudozufallszahl ist eine Zahl, die zufällig erscheint, aber nicht wirklich zufällig ist. Eine Pseudozufallszahl ist nicht wirklich zufällig, da ihr Wert von einem bekannten Seed generiert wurde. Es scheint jedoch zufällig zu sein, wenn der Benutzer den Seed oder Algorithmus, der ihn erstellt hat, nicht kennt.
Daher werden Pseudozufallszahlen für viele Anwendungen oft als gut genug angesehen.
Beispiel
Hier ist ein Beispiel für die Generierung einer Pseudozufallszahl mit random()
Funktion.
SELECT random();
Ergebnis:
0.625357600199532
Das Ergebnis wird natürlich bei jedem Aufruf anders sein.
Hier ist ein weiteres Beispiel, in dem ich die Funktion dreimal in derselben Anweisung aufrufe.
SELECT
random(),
random(),
random();
Ergebnis:
random | random | random -------------------+---------------------+-------------------- 0.594431747016209 | 0.22816249693650903 | 0.7168820259873314
Zufallszahl zwischen 1 und 10
Hier ist ein Beispiel für die Generierung einer positiven Zahl zwischen 0 und 10.
SELECT random() * 10 + 1;
Ergebnis:
4.564859004063727
Nur um das klarzustellen, dies generiert eine Zufallszahl, die>=1 und <10 ist.
Zufallszahl
Sie können eine Funktion wie trunc()
verwenden oder floor()
um die Zufallszahl als Ganzzahl zurückzugeben.
SELECT
trunc(random() * 10 + 1),
floor(random() * 10 + 1);
Ergebnis:
trunc | floor -------+------- 1 | 8
Zufällige Zeilen zurückgeben
Sie können random()
verwenden in einem ORDER BY
Klausel einer Datenbankabfrage, um zufällige Zeilen zurückzugeben.
Hier ist ein Beispiel, das die Pagila abfragt Beispieldatenbank.
SELECT
film_id,
title
FROM film
ORDER BY random() LIMIT 5;
Ergebnis:
film_id | title ---------+--------------------- 116 | CANDIDATE PERDITION 806 | SLEEPY JAPANESE 892 | TITANIC BOONDOCK 826 | SPEED SUIT 612 | MUSSOLINI SPOILERS
Und hier ist, was ich bekomme, wenn ich es erneut ausführe:
film_id | title ---------+-------------------- 450 | IDOLS SNATCHERS 827 | SPICE SORORITY 593 | MONTEREY LABYRINTH 529 | LONELY ELEPHANT 591 | MONSOON CAUSE
Wenn Sie eine große Tabelle haben und alle Zeilen (oder viele Zeilen) zurückgeben müssen, möchten Sie Ihre Abfrage vielleicht so ändern:
SELECT *
FROM film
WHERE film_id IN
(SELECT film_id FROM film ORDER BY random() LIMIT 5);
Erstellen Sie wiederholbare Zufallszahlen
Postgres hat auch ein setseed()
Funktion, mit der Sie einen Startwert für nachfolgende random()
festlegen können Anrufe innerhalb derselben Sitzung.
Sie können setseed()
verwenden um wiederholbares random()
zu generieren Anrufe.
Beispiele finden Sie unter Funktionsweise von Setseed() in Postgres.