Halaman

Sabtu, 01 September 2012

Membuat Nilai Acak Pada Query MySQL

Artikel ini membahas secara sederhana bagaimana membuat nilai acak pada query MySQL. Nilai acak (random) tersebut memiliki range tertentu yang dapat ditentukan berdasarkan nilai awal dan nilai akhir.

Penggunaan nilai acak (random)
Penggunaan nilai acak sering dipakai untuk mensimulasi nilai pada kejadian yang sebenarnya. Namun bila data yang ada jumlahnya banyak sehingga bila data tiap barisnya diberi nilai asli maka akan memakan waktu yang lama. Penggunaan nilai acak tentu hanya digunakan pada saat pengetesan saja namun jika digunakan pada saat dijalankan (produksi) tentu memakai nilai yang asli.

Fungsi bawaan MySQL: RAND() dan FLOOR()
Nilai acak pada MySQL menggunakan fungsi RAND() dan nilai kembalian yang didapat dari fungsi RAND() tersebut adalah nilai acak >= 0 dan nilai acak < 1.0 yang berupa pecahan desimal (float). Jika menginginkan nilai dalam bentuk bilangan bulat (integer), fungsi FLOOR() bisa dipakai untuk keperluan ini.

Kombinasi penggunaan fungsi RAND() dan FLOOR()
Penggunaan fungsi RAND() dan FLOOR() bila dipakai untuk menghasilkan nilai dalam bentuk bilangan bulat acak, tidak bisa menggunakan cara seperti ini:
SELECT FLOOR(RAND())
Mengapa tidak bisa dan hasilnya selalu nol? Karena fungsi FLOOR() akan memotong nilai pecahan desimalnya (mengabaikan nilai dibelakang koma) padahal fungsi RAND() akan menghasilkan nilai 0,...,0.999999 dan oleh karenanya wajar jika gabungan fungsi di atas akan selalu menghasilkan nilai nol.

Solusinya adalah dengan memberikan range awal dan akhir yang akan membatasi nilai kembalian fungsi RAND(). Range nilai kembalian pada fungsi RAND() ini memiliki rumus:
nilai awal <= nilai acak < nilai akhir
Perhatikan bahwa nilai acak yang dihasilkan selalu kurang dari (<) nilai akhir dan kurang atau sama dengan (<=) nilai awal. Oleh karena itu nilai akhir perlu ditambah satu jika nilai akhir ingin diikutkan dalam nilai acak.

Untuk lebih jelasnya lihat implementasi matematis dari fungsi RAND() untuk mendapatkan bilangan bulat acak berikut:
nilaiAcak = nilaiAwal + RAND() x ((nilaiAkhir - nilaiAwal) + 1)
Misalnya saja nilai acak yang diinginkan adalah nilai 1 - 100. Fungsi RAND() misalnya mengembalikan bilangan pecahan acak yaitu 0.89, maka bisa ditentukan nilai variabelnya:
nilaiAwal = 1
nilaiAkhir = 100
RAND() = 0.89
Sehingga dari rumus diatas, nilai acak akan bernilai bilangan pecahan:
nilaiAcak = 1 + 0.8956 x ((100 - 1) + 1)
nilaiAcak = 1 + 0.8956 x 100
nilaiAcak = 1 + 89.56
nilaiAcak = 90.56
Namun yang diinginkan adalah bilangan bulat (integer) dari bilangan pecahan di atas. Maka diperlukan fungsi FLOOR() yang akan memotong nilai pecahan desimalnya (nilai di belakang koma) sehingga hasilnya adalah bilangan bulat 90.
bilBulatAcak = FLOOR(nilaiAcak)

Implementasi fungsi RAND() dan FLOOR() pada perintah SQL
Misalnya nilai acak yang diinginkan berupa nilai bilangan bulat dari 0 - 100. Berdasarkan rumus di atas maka bentuk penulisan perintah SQL-nya adalah:
SELECT FLOOR(0 + RAND() * ((100 - 0) + 1))
Kemudian dapat disederhanakan menjadi:
SELECT FLOOR(RAND() * 101)
Misalnya hasil yang di dapat adalah seperti yang terlihat pada gambar di bawah ini:


Nilai acak bilangan bulat hasil dari kombinasi fungsi FLOOR() dan RAND()


Implementasinya dalam tabel MySQL
Nilai acak dapat dipakai untuk mensimulasikan nilai sebenarnya yang berguna jika tabel baru saja dibuat dan digunakan sebagai data pengetesan. Misalnya datanya ada seribu buah, tentu sangat tidak praktis dan membuang banyak waktu jika data yang asli dimasukan satu per satu ke dalam tabel dan itu dilakukan dalam tahap pembuatan dan pengetesan database atau tabel.

Bagaimana implementasi nilai acak menggunakan kombinasi fungsi RAND() dan FLOOR() bila digunakan pada suatu tabel? Silakan baca pada artikel yang berjudul Penggunaan Data Acak (Random) pada Tabel MySQL

Semoga bermanfaat... keep learning by doing...

© 2012 husnanlabs.blogspot.com

1 komentar: