PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как работи Random() в PostgreSQL

В PostgreSQL, random() функцията връща псевдослучайна стойност в диапазона 0,0 <=x <1,0.

Той използва прост линеен конгруентен алгоритъм, който е един от най-старите и най-известни алгоритми за генериране на псевдослучайни числа.

Псевдослучайно число е число, което изглежда случайно, но не е наистина случайно. Псевдослучайното число не е наистина случайно, защото стойността му е генерирана от известно начало. Въпреки това ще изглежда произволно, ако потребителят няма познания за семето или алгоритъма, който го е създал.

Следователно псевдослучайните числа често се считат за достатъчно добри за много приложения.

Пример

Ето пример за генериране на псевдослучайно число с random() функция.

SELECT random();

Резултат:

0.625357600199532

Резултатът очевидно ще бъде различен всеки път, когато го извикате.

Ето още един пример, в който извиквам функцията три пъти в едно и също изявление.

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

Резултат:

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

Произволно число между 1 и 10

Ето пример за генериране на положително число между 0 и 10.

SELECT random() * 10 + 1;

Резултат:

4.564859004063727

Само за да е ясно, това генерира произволно число, което е>=​​1 и <10.

Случайно цяло число

Можете да използвате функция като trunc() или floor() за да върнете произволното число като цяло число.

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

Резултат:

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

Връщане на произволни редове

Можете да използвате random() в ORDER BY клауза на заявка към база данни за връщане на произволни редове.

Ето пример, който прави заявки за pagila примерна база данни.

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

Резултат:

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

И ето какво получавам, ако го стартирам отново:

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

Ако имате голяма таблица и трябва да върнете всички редове (или много редове), може да искате да промените заявката си до нещо подобно:

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

Създаване на повтарящи се произволни числа

Postgres също има setseed() функция, която ви позволява да зададете начало за последващи random() обаждания в рамките на същата сесия.

Можете да използвате setseed() за генериране на повторяем random() обаждания.

Вижте как Setseed() работи в Postgres за примери.


  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 12

  2. Множество CTE в една заявка

  3. Как да получите PostgreSQL на VPS / Специализиран сървър

  4. Мащабиране на връзките в PostgreSQL с помощта на пул на връзки

  5. Плъзгаща се средна въз основа на времеви печати в PostgreSQL