Tulisan ini sekedar memberikan cara alternatif meng-query data di MySQL, sebuah cara meng-query yang bisa dipakai untuk menghitung nilai saldo (balance) dari seluruh transaksi keuangan yang memiliki fitur D (debet) dan K (kredit) dengan contoh data sebagai berikut.
rekeningId | jenis | total |
---|---|---|
4 | D | 3000 |
5 | D | 35000 |
10 | D | 10000 |
11 | D | 5000 |
12 | D | 1000 |
13 | D | 5000 |
14 | D | 71000 |
1 | D | 130000 |
22 | D | 40000 |
26 | D | 25000 |
27 | D | 35000 |
27 | K | 34100 |
Tabel tersebut menyajikan saldo tiap-tiap rekening yang terkelompok per jenis transaksi (D/K). Kolom “rekeningId” pada tabel tersebut menandakan ID rekening, kolom “jenis” merupakan jenis transaksinya, dan kolom “total” merupakan saldo rekening per jenis transaksi.
Permasalahan yang harus diselesaikan adalah bagaimana caranya agar nominal tersebut dapat dijumlahkan sehingga bisa didapatkan saldo total dari seluruh rekening, tentu saja setelah dikurangi nominal yang berjenis K.
Beberapa model query mungkin bisa digunakan, namun pada tulisan ini saya mencoba untuk mengombinasikan fungsi agregat SUM dengan menambahkan kondisi di dalamnya. Berikut contoh script SQL-nya:
SELECT SUM( IF( jenis = ‘D’, total, -total ) ) AS saldoTotal
FROM nama_tabel;
FROM nama_tabel;
Kondisi [jenis = ‘D’] tersebut menandakan kalau nilai yang ditambahkan adalah nilai positif (+). Namun, jika jenis dari baris data merupakan ‘K’, maka nilainya akan diubah menjadi minus (-) terlebih dahulu sebelum dijumlahkan. Sehingga, ketika perintah SUM dijalankan, secara otomatis item-item transaksi yang berjenis K akan menjadi pengurang saldo.
Cara tersebut dapat mempersingkat script SQL yang biasanya saya lakukan dengan menggunakan subquery yang lumrahnya memakan waktu (berat di proses). Query tersebut mungkin dapat juga diaplikasikan di beberapa studi kasus lain dengan kondisi yang serupa (menjumlahkan kolom yang memiliki kondisi positif dan negatif namun disimpan dalam bentuk positif [unsigned]).
Demikian tulisan kali ini, dan selamat mencoba π
Sip, cak…. π
Terima kasih atas kunjungannya, Pak @eshabe π
Gimana kalau di jenis itu ada A,B,C,D dan kita ingin tahu jumlah masing2 jenis saja.
produk|id_gudang|jumlah
A 1 40
A 2 15
B 1 2
B 2 21
C 1 30
C 2 17
dst
Terimkasih atas jawabannnya, Mas Nanang π
Berarti SUM per jenis begitu kah, tanpa memperhatikan apakah nilai itu negatif atau positif kan?
Mungkin bisa dengan cara menambahkan GROUP BY di query untuk menjumlah per group (A, B, C, dst..)
*semogaBener*
hatur nuhun
sami sami π
izin bertanya apa syntax untuk menampilkan data yang sudah diinputkan? thanks
Ada banyak tutorial di internet. Silakan dicari.
Good article! We will be linking to this particularly great post on our
website. Thanks for your sharing!
please visit us for more information
Terimakasih kak ,,karna blog yang kakak buat bagus dan saya menjadi lebih memahami Query SUM+IF,,semoga sukses dan terus berkarya kak perkenalkan nama saya Sri Wulan ISB Atmaluhur
Sama-sama. Semoga bermanfaat.