Agregat perkalian pada MySQL

Di sistem manajemen database MySQL, dikenal fungsi agregat penjumlahan SUM(). Fungsi ini akan mengambil isi suatu field pada tiap-tiap record yang sesuai kriteria dan menjumlahkannya. Masalahnya tidak ada fungsi yang serupa untuk perkalian yang disediakan oleh MySQL.

Bagaimana bila Anda ingin mengalikan semua data pada field bernama nilai pada gambar di bawah sehingga hasilnya adalah 1.0 * 0.8 *0.6 * 0.8 * 1.0 dan seterusnya.

Contoh tabel dalam database di MySQL


Solusinya terletak pada penggunaan fungsi logaritma dan eksponensial untuk memecahkan problem ini. Mengapa bisa?

Dari pelajaran matematika, Anda tentu ingat (saya pribadi tidak begitu ingat :P ) bahwa:

Persamaan 1.
exp(log(x))=x

Persamaan 2.
log(a1*a2)=log(a1)+log(a2)

Sama juga bila saya nyatakan bahwa:

Persamaan 3.
log(a1*a2*a3*…*an)=log(a1)+log(a2)+log(a3)+…+log(an)

Subtitusi Persamaan 3 ke Persamaan 1 diperoleh

a1*a2*a3*…*an = exp(log(a1*a2*a3*…*an))

Atau dalam bentuk lain:

Persamaan 4.
a1*a2*a3*…*an = exp(log(a1)+log(a2)+log(a3)+…+log(an))

Persamaan 4 adalah dasar kita menyelesaikan problem agregat perkalian. Persamaan 4 dalam bentuk perintah SQL adalah sebagai berikut:

SELECT EXP(SUM(LOG(field_name))) AS total_multiply FROM table_name;

Jika field bernama field_name pada tabel bernama table_name dapat mengandung nilai NULL, untuk menghasilkan perhitungan yang benar, Anda harus mengubah nilai NULL ini menjadi 1.0 menggunakan COALESCE().

Ingat bahwa:
log(1.0) = 0.0

Karena nilai 0.0 tidak berpengaruh pada penjumlahan (semua bilangan ditambahkan 0 adalah bilangan itu sendiri), sehingga nilai NULL tidak akan berpengaruh terhadap hasil akhir SUM().

Bentuk akhir perintah SQL perkalian agregat adalah sebagai berikut:

SELECT EXP(SUM(LOG(COALESCE(field_name,1)))) AS total_multiply FROM table_name;

One thought on “Agregat perkalian pada MySQL

Leave a Reply to ibar Cancel reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>