Sabtu, 05 Januari 2013

Menggunakan SUM IF untuk menjumlahkan nilai field/kolom suatu Tabel pada MySQL


Pada kesempatan kali ini dan beberapa contoh dalam artikel berikutnya kita akan membahas berbagai fungsi yang disediakan oleh database MySQL. Untuk itu sebelumnya kita buat beberapa tabel yang diperlukan. Skema tabel dan relasi tabel adalah sebagai berikut:
diagram_erd
Diagram ERD pada database penjualan
Artikel ini hanya khusus membahas penjumlahan pada kolom tertentu dalam suatu tabel dengan syarat suatu kondisi terpenuhi. Tabel yang kita perlukan hanya tabel tunai yang dalam hal ini merupakan contoh tabel untuk penjualan tunai. 
Penjelasan field:
  • id_pelanggan dan id_cabang  merupakan merupakan nomor seri pelanggan.
  • kd_produk merupakan kode jenis produk misal: 111 untuk TV, 112 untuk Kulkas, 113 untuk VCD/DVD player, 115 untuk laptop.
  • kd_item merupakan deskripsi dari produk misal 0132AV550, dua digit pertama merupakan merk (01 untuk Toshiba, karakter berikutnya (32AV550)  merupakan nomor seri produk.
  • tgl_byr merupakan tanggal pembayaran dengan format yyyy-mm-dd.
  • jml_byr merupakan jumlah pembayaran.
query SQL yang digunakan untuk membuat tabel berikut contentnya:
CREATE TABLE IF NOT EXISTS `tunai` ( `id_pelanggan` varchar(50) DEFAULT NULL, `id_cabang` varchar(50) DEFAULT NULL, `kd_produk` varchar(50) DEFAULT NULL, `kd_item` varchar(20) DEFAULT NULL, `tgl_byr` varchar(50) DEFAULT NULL, `jml_byr` int(11) DEFAULT NULL, KEY `id_pelanggan` (`id_pelanggan`,`id_cabang`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
query untuk content:
INSERT INTO `tunai` (`id_pelanggan`, `id_cabang`, `kd_produk`, `kd_item`, `tgl_byr`, `jml_byr`) VALUES
('020011', '05', '111', '01L17LEDW', '20110202', 1500000),
('020011', '05', '112', '01G150L', '20110310', 1250000),
('020011', '05', '113', '02PXS24X', '20110410', 750000),
('012546', '12', '112', '02IC200L', '20100202', 500000),
('012546', '12', '112', '01G250L', '20100310', 3500000),
('012546', '12', '113', '03GC225P', '20110410', 1500000),
('027845', '07', '115', '01C5-002', '20110202', 1550000),
('027845', '07', '115', '02ST17I', '20100310', 2730000),
('027845', '07', '111', '0132AV550', '20110410', 4949000),
('020011', '02', '115', '01603', '20100202', 2450000),
('020011', '02', '111', '05PLM24M60', '20110310', 1725000),
('015558', '01', '111', '05MX1403R', '20100410', 775000),
('015558', '01', '115', '02MT15I XPERIA NEO', '20110410', 2900000);
Tabel akan tampak seperti gambar berikut:
tabel tunai dalam database penjualan
Pertama kita akan melakukan penjumlahan semua penjualan berdasarkan tahun, query yang kita gunakan adalah:
SELECT  SUM(IF(tgl_byr LIKE "2011%", jml_byr, 0)) AS jml_2011,
        SUM(IF(tgl_byr LIKE "2010%", jml_byr, 0)) AS jml_2010
FROM tunai
Output yang kita peroleh:
+----------+----------+
| jml_2011 | jml_2010 |
+----------+----------+
| 16124000 |  9955000 |
+----------+----------+
Jika kita akan mengelompokkan berdasarkan id pelanggan sehingga dapat diketahui berapa jumlah pembelian yang dilakukan per tahunnya maka query yang kita gunakan:
SELECT  id_pelanggan, 
        id_cabang,
        SUM(IF(tgl_byr LIKE "2011%", jml_byr, 0)) AS jml_2011,
        SUM(IF(tgl_byr LIKE "2010%", jml_byr, 0)) AS jml_2010,
        SUM(jml_byr) AS TOTAL
FROM tunai
GROUP BY id_pelanggan, id_cabang
Hasil yang kita dapatkan:
+--------------+-----------+----------+----------+---------+
| id_pelanggan | id_cabang | jml_2011 | jml_2010 | TOTAL   |
+--------------+-----------+----------+----------+---------+
| 012546       | 12        |  1500000 |  4000000 | 5500000 |
| 015558       | 01        |  2900000 |   775000 | 3675000 |
| 020011       | 02        |  1725000 |  2450000 | 4175000 |
| 020011       | 05        |  3500000 |        0 | 3500000 |
| 027845       | 07        |  6499000 |  2730000 | 9229000 |
+--------------+-----------+----------+----------+---------+
jika kita ingin menjumlahkan kolom dengan beberapa kondisi, kita tidak bisa menggunakan if, tetapi menggunakan CASE, yang pembahasannya di artikel berikut ini.

0 komentar:

Posting Komentar

 
- ,