Show all

Information

Menghitung Field/Kolom Pada Tabel MySQL/Postgre Dengan Kondisi Tertentu Menggunakan COUNT IF

Seperti kita ketahui, untuk menghitung row/baris pada tabel, kita menggunakan fungsi COUNT, yang otomatis menghitung jumlah row yang ada nilainya (row dengan nilai NULL tidak akan dihitung). baris yang dihitung dapat dilakukan dengan 2 cara yaitu:

  • COUNT(*) yaitu menghitung row untuk semua field
  • COUNT(field_name) yaitu menghitung row untuk field tertentu

Sedangkan fungsi count dibag menjadi 2 yaitu:

  • COUNT untuk menghitung semua row walaupun ada duplikasi data
  • COUNT (DISTINCT) untuk menghitung row yang unique

melanjutkan pada artikel sebelumnya, sekarang kita akan menghitung jumlah item yang terjual berdasarkan tahun panjualan, query yang kita gunakan :

SELECT  COUNT(IF(tgl_byr LIKE "2011%", jml_byr, NULL)) AS item_2011,
        COUNT(IF(tgl_byr LIKE "2010%", jml_byr, NULL)) AS item_2010,
        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

yang akan menghasilkan:

+----------+----------+----------+----------+
| item_2011| item_2010| jml_2011 | jml_2010 |
+----------+----------+----------+----------+
| 8        | 5        | 16124000 |  9955000 |
+----------+----------+----------+----------+

selanjutnya jika kita akan mengkelompokkan hasil tersebut berdasarkan field/kolom tertentu misal id_pelanggan dan id_cabang maka kita menggunakan GROUP BY. Contoh:

SELECT  id_pelanggan,
        id_cabang,
        COUNT(IF(tgl_byr LIKE "2011%", jml_byr, NULL)) AS item_2011,
        COUNT(IF(tgl_byr LIKE "2010%", jml_byr, NULL)) AS item_2010,
        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
GROUP BY id_pelanggan, id_cabang

maka hasil yang akan kita peroleh:

+--------------+-----------+-----------+-----------+----------+----------+
| id_pelanggan | id_cabang | item_2011 | item_2010 | jml_2011 | jml_2010 |
+--------------+-----------+-----------+-----------+----------+----------+
| 012546       | 12        |         1 |         2 |  1500000 |  4000000 |
| 015558       | 01        |         1 |         1 |  2900000 |   775000 |
| 020011       | 02        |         1 |         1 |  1725000 |  2450000 |
| 020011       | 05        |         3 |         0 |  3500000 |        0 |
| 027845       | 07        |         2 |         1 |  6499000 |  2730000 |
+--------------+-----------+-----------+-----------+----------+----------+
5 rows in set (0.00 sec)

lain hal bila menggunakan postgre

querynya seperti ini.

SELECT  id_pelanggan,
        id_cabang,
        COUNT(case tgl_byr LIKE "2011%" then 1 end) AS item_2011,
        COUNT(case tgl_byr LIKE "2010%" then 1 end) AS item_2010,
        SUM(case tgl_byr LIKE "2011%" then 1 end) AS jml_2011,
        SUM(case tgl_byr LIKE "2010%", then 1 end) AS jml_2010
FROM tunai
GROUP BY id_pelanggan, id_cabang


















Related

    Facebook Comments

    Back to the top