PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana Random() Bekerja di PostgreSQL

Di PostgreSQL, random() fungsi mengembalikan nilai pseudo-acak dalam kisaran 0,0 <=x <1,0.

Ini menggunakan algoritme kongruensial linier sederhana, yang merupakan salah satu algoritme pembangkit bilangan pseudo-acak tertua dan paling terkenal.

Bilangan acak semu adalah bilangan yang tampak acak, tetapi tidak benar-benar acak. Angka pseudo-acak tidak benar-benar acak karena nilainya dihasilkan oleh benih yang diketahui. Namun, ini akan tampak acak jika pengguna tidak memiliki pengetahuan tentang seed atau algoritme yang membuatnya.

Oleh karena itu, bilangan pseudo-acak sering dianggap cukup baik untuk banyak aplikasi.

Contoh

Berikut adalah contoh menghasilkan angka pseudo-acak dengan random() fungsi.

SELECT random();

Hasil:

0.625357600199532

Hasilnya jelas akan berbeda setiap kali Anda menyebutnya.

Berikut ini contoh lain di mana saya memanggil fungsi tiga kali dalam pernyataan yang sama.

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

Hasil:

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

Angka Acak Antara 1 dan 10

Berikut adalah contoh menghasilkan angka positif antara 0 dan 10.

SELECT random() * 10 + 1;

Hasil:

4.564859004063727

Untuk memperjelas, ini menghasilkan angka acak yaitu>=1 dan <10.

Bilangan Bulat Acak

Anda dapat menggunakan fungsi seperti trunc() atau floor() untuk mengembalikan nomor acak sebagai bilangan bulat.

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

Hasil:

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

Kembalikan Baris Acak

Anda dapat menggunakan random() dalam ORDER BY klausa kueri database untuk mengembalikan baris acak.

Berikut ini contoh kueri pagila contoh basis data.

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

Hasil:

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

Dan inilah yang saya dapatkan jika saya menjalankannya lagi:

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

Jika Anda memiliki tabel besar, dan Anda perlu mengembalikan semua baris (atau banyak baris), Anda mungkin ingin mengubah kueri Anda menjadi seperti ini:

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

Buat Angka Acak yang Dapat Diulang

Postgres juga memiliki setseed() fungsi yang memungkinkan Anda menyetel benih untuk random() berikutnya panggilan dalam sesi yang sama.

Anda dapat menggunakan setseed() untuk menghasilkan random() . yang dapat diulang panggilan.

Lihat Bagaimana Setseed() Bekerja di Postgres untuk contoh.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengubah kunci utama dari integer ke serial?

  2. Bagaimana cara menggunakan nama kolom dinamis dalam pernyataan UPDATE atau SELECT dalam suatu fungsi?

  3. Memahami Kolom Sistem di PostgreSQL

  4. gabungkan dua tabel berbeda dan hapus entri yang digandakan

  5. Mendapatkan [pengarsip] versi yang tidak didukung (1.13) di header file saat menjalankan pg_restore