Belajar SQL: CASE Clause - Logika Percabangan

Belajar SQL Logika Percabangan Case clauseSalah satu fungsi atau clause yang kurang begitu populer di SQL adalah CASE clause. Salah satu sebabnya adalah umunya SQL lebih dikenal hanya untuk proses SELECT, INSERT, UPDATE dan DELETE saja, dan karena CASE clause punya fungsi yang sama dengan IF di semua bahasa pemrograman yang ada, misalkan PHP, Java, dan sebagainya. Untuk itu saya akan berikan contoh sederhana penggunaan SQL untuk melakukan perhitungan dengan sedikit logika IF sederhana.

Misalkan kita mempunya contoh data seperti berikut ini

mysql> select * from penggunaan;
+----------+-------+--------+-------+-------+-------+-------+--------+
| kegiatan | senin | selasa | rabu  | kamis | jumat | sabtu | minggu |
+----------+-------+--------+-------+-------+-------+-------+--------+
| olahraga | ya    | tidak  | ya    | tidak | ya    | tidak | tidak  |
| diskusi  | tidak | ya     | tidak | tidak | tidak | ya    | tidak  |
| rapat    | ya    | tidak  | tidak | tidak | tidak | tidak | tidak  |
| ulangan  | tidak | ya     | ya    | ya    | tidak | tidak | tidak  |
+----------+-------+--------+-------+-------+-------+-------+--------+
4 rows in set (0.00 sec)

ketika kita ingin tahu berapa banyak dalam seminggu kegiatan-kegiatan tersebut di atas dilakukan atau tidak. Sebagai contoh untuk kegiatan OLAHRAGA dalam satu minggu dilakukan sebanyak 3 kali dan tidak dilakukan sebanyak 4 kali. jika kita bisa dengan mudah menggunakan PHP dan looping untuk menghitungnya menggunakan logika percabangan IF, misalkan.

if ($row['senin']=='ya')
    $dilakukan += 1;
else
    $tidak_dilakukan += 1;

Kalau menggunakan SQL caranya adalah seperti ini

mysql> select penggunaan.*
    -> , case when senin='ya' then 1 else 0 end
    -> + case when selasa='ya' then 1 else 0 end
    -> + case when rabu='ya' then 1 else 0 end
    -> + case when kamis='ya' then 1 else 0 end
    -> + case when jumat='ya' then 1 else 0 end
    -> + case when sabtu='ya' then 1 else 0 end
    -> + case when minggu='ya' then 1 else 0 end as dilakukan
    -> , case when senin='tidak' then 1 else 0 end
    -> + case when selasa='tidak' then 1 else 0 end
    -> + case when rabu='tidak' then 1 else 0 end
    -> + case when kamis='tidak' then 1 else 0 end
    -> + case when jumat='tidak' then 1 else 0 end
    -> + case when sabtu='tidak' then 1 else 0 end
    -> + case when minggu='tidak' then 1 else 0 end as tidak_dilakukan
    -> from penggunaan ;

Saat menghitung jumlah "dilakukan" kita berikan nilai 1 jika field berisikan 'ya', selain itu beli nilai 0. Dan saat menghitung jumlah "tidak_dilakukan" kita berikan nilai 1 jika field berisikan 'tidak', selain itu beli nilai 0. Setelah itu jumlahkan semua CASE clause tersebut sehingga kita dapatkan hasil seperti ini

+----------+-------+--------+-------+-------+-------+-------+--------+-----------+-----------------+
| kegiatan | senin | selasa | rabu  | kamis | jumat | sabtu | minggu | dilakukan | tidak_dilakukan |
+----------+-------+--------+-------+-------+-------+-------+--------+-----------+-----------------+
| olahraga | ya    | tidak  | ya    | tidak | ya    | tidak | tidak  |         3 |               4 |
| diskusi  | tidak | ya     | tidak | tidak | tidak | ya    | tidak  |         2 |               5 |
| rapat    | ya    | tidak  | tidak | tidak | tidak | tidak | tidak  |         1 |               6 |
| ulangan  | tidak | ya     | ya    | ya    | tidak | tidak | tidak  |         3 |               4 |
+----------+-------+--------+-------+-------+-------+-------+--------+-----------+-----------------+
4 rows in set (0.00 sec)

Tadaaaa..... Bagaimana? Luar biasa, bukan?

Dengan satu perintah SQL, kita bisa mendapatkan data yang matang dan ketika membuat program PHP-nya kita cukup menmpilkannya saja dalam bertuk <table></table> dan tidak perlu menghitung-hitung lagi. Mudah dan Cepat (y)