PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách Random () hoạt động trong PostgreSQL

Trong PostgreSQL, random() hàm trả về một giá trị giả ngẫu nhiên trong phạm vi 0.0 <=x <1.0.

Nó sử dụng một thuật toán đồng dư tuyến tính đơn giản, là một trong những thuật toán tạo số giả ngẫu nhiên lâu đời nhất và nổi tiếng nhất.

Một số giả ngẫu nhiên là một số có vẻ là ngẫu nhiên, nhưng không thực sự là ngẫu nhiên. Một số giả ngẫu nhiên không phải là ngẫu nhiên thực sự vì giá trị của nó được tạo ra bởi một hạt giống đã biết. Tuy nhiên, nó sẽ có vẻ là ngẫu nhiên nếu người dùng không có kiến ​​thức về hạt giống hoặc thuật toán đã tạo ra nó.

Do đó, các số giả ngẫu nhiên thường được coi là đủ tốt cho nhiều ứng dụng.

Ví dụ

Dưới đây là một ví dụ về việc tạo một số giả ngẫu nhiên với random() chức năng.

SELECT random();

Kết quả:

0.625357600199532

Kết quả rõ ràng sẽ khác nhau mỗi khi bạn gọi nó.

Đây là một ví dụ khác mà tôi gọi hàm ba lần trong cùng một câu lệnh.

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

Kết quả:

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

Số ngẫu nhiên từ 1 đến 10

Dưới đây là một ví dụ về việc tạo một số dương từ 0 đến 10.

SELECT random() * 10 + 1;

Kết quả:

4.564859004063727

Nói rõ hơn, điều này tạo ra một số ngẫu nhiên> =1 và <10.

Số nguyên Ngẫu nhiên

Bạn có thể sử dụng một hàm như trunc() hoặc floor() để trả về số ngẫu nhiên dưới dạng số nguyên.

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

Kết quả:

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

Trả về hàng ngẫu nhiên

Bạn có thể sử dụng random() trong một ORDER BY mệnh đề của một truy vấn cơ sở dữ liệu để trả về các hàng ngẫu nhiên.

Đây là một ví dụ truy vấn pagila cơ sở dữ liệu mẫu.

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

Kết quả:

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

Và đây là những gì tôi nhận được nếu chạy lại:

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

Nếu bạn có một bảng lớn và bạn cần trả lại tất cả các hàng (hoặc nhiều hàng), bạn có thể muốn sửa đổi truy vấn của mình thành một cái gì đó như sau:

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

Tạo số ngẫu nhiên lặp lại

Postgres cũng có setseed() cho phép bạn đặt một hạt giống cho random() tiếp theo cuộc gọi trong cùng một phiên.

Bạn có thể sử dụng setseed() để tạo random() có thể lặp lại cuộc gọi.

Xem Cách hoạt động của Setseed () trong Postgres để biết các ví dụ.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. OFFSET đấu với ROW_NUMBER ()

  2. Trình điều khiển PostgreSQL 9.2 JDBC sử dụng múi giờ máy khách?

  3. PostgreSQL - Thay thế các thực thể HTML

  4. Cách hiển thị cài đặt hiện tại cho đầu ra rỗng trong PostgreSQL (psql)

  5. Cách sao lưu và khôi phục cơ sở dữ liệu PostgreSQL qua DBeaver