PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak działa Random() w PostgreSQL

W PostgreSQL random() funkcja zwraca pseudolosową wartość z zakresu 0,0 <=x <1,0.

Wykorzystuje prosty liniowy algorytm kongruencji, który jest jednym z najstarszych i najlepiej znanych algorytmów generatora liczb pseudolosowych.

Liczba pseudolosowa to liczba, która wydaje się być losowa, ale tak naprawdę nie jest losowa. Liczba pseudolosowa nie jest tak naprawdę losowa, ponieważ jej wartość została wygenerowana przez znane ziarno. Jednak wydaje się, że jest losowy, jeśli użytkownik nie ma wiedzy o źródle lub algorytmie, który go utworzył.

Dlatego liczby pseudolosowe są często uważane za wystarczająco dobre dla wielu zastosowań.

Przykład

Oto przykład generowania liczby pseudolosowej za pomocą random() funkcja.

SELECT random();

Wynik:

0.625357600199532

Wynik będzie oczywiście inny za każdym razem, gdy to nazwiesz.

Oto kolejny przykład, w którym trzy razy wywołuję funkcję w tej samej instrukcji.

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

Wynik:

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

Liczba losowa od 1 do 10

Oto przykład generowania liczby dodatniej od 0 do 10.

SELECT random() * 10 + 1;

Wynik:

4.564859004063727

Żeby było jasne, generuje to losową liczbę, która jest>=1 i <10.

Losowa liczba całkowita

Możesz użyć funkcji takiej jak trunc() lub floor() aby zwrócić liczbę losową jako liczbę całkowitą.

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

Wynik:

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

Zwróć losowe wiersze

Możesz użyć random() w ORDER BY klauzula zapytania bazy danych, aby zwrócić losowe wiersze.

Oto przykład, który wysyła zapytanie do pagili przykładowa baza danych.

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

Wynik:

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

A oto, co otrzymam, jeśli uruchomię go ponownie:

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

Jeśli masz dużą tabelę i chcesz zwrócić wszystkie wiersze (lub wiele wierszy), możesz zmodyfikować zapytanie w taki sposób:

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

Twórz powtarzalne liczby losowe

Postgres ma również funkcję setseed() funkcja, która pozwala ustawić ziarno dla kolejnych random() połączeń w ramach tej samej sesji.

Możesz użyć setseed() do generowania powtarzalnych random() połączeń.

Zobacz, jak działa Setseed() w Postgresie, aby zapoznać się z przykładami.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL utwórz tabelę, jeśli nie istnieje

  2. Jak uzyskać różnicę dni/miesięcy/lat (datediff) między dwiema datami?

  3. Kilka obszarów ulepszeń w PostgreSQL 9.4

  4. Nie można połączyć się z lokalnym PostgreSQL

  5. Jak połączyć GraphQL i PostgreSQL