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.