Data mentah jarang langsung siap digunakan untuk mengambil keputusan. Pelanggan perlu dikelompokkan berdasarkan nilai belanjanya, produk perlu diberi label berdasarkan harga dan stok, sementara transaksi perlu dibedakan antara kecil, sedang, besar, berhasil, atau dibatalkan. Jika semua logika tersebut dikerjakan secara manual di aplikasi, query dan kode bisnis akan cepat menjadi rumit.
Di sinilah CASE WHEN menjadi salah satu fitur SQL yang sangat penting. Dengan CASE WHEN, Anda dapat menerjemahkan aturan bisnis langsung ke dalam query, mulai dari segmentasi pelanggan, klasifikasi produk, hingga pembuatan laporan transaksi yang lebih mudah dipahami.
- CASE WHEN digunakan untuk membuat logika kondisi langsung di dalam query SQL.
- Bisa digunakan untuk mengelompokkan pelanggan, produk, maupun transaksi.
- Urutan kondisi sangat penting karena SQL membaca kondisi dari atas ke bawah.
- Gunakan
ELSEagar data yang tidak memenuhi kondisi tetap memiliki nilai default. - Gabungkan dengan
GROUP BY,SUM,COUNT, CTE, dan conditional aggregation untuk membuat laporan bisnis.
🎯 Apa Itu SQL CASE WHEN?
CASE WHEN adalah ekspresi kondisional dalam SQL yang bekerja seperti logika if-then-else pada bahasa pemrograman. SQL akan memeriksa kondisi dari atas ke bawah dan mengembalikan hasil dari kondisi pertama yang terpenuhi.
Dengan kata lain, CASE WHEN membantu kita mengubah nilai mentah menjadi informasi yang lebih bermakna. Nilai transaksi Rp12.000.000 dapat diberi label “Transaksi Besar”, stok 0 dapat diberi status “Habis”, dan pelanggan dengan total belanja tinggi dapat dimasukkan ke segmen “Platinum”.
Sintaks Dasar CASE WHEN
- WHEN berisi kondisi yang akan diperiksa.
- THEN berisi hasil jika kondisi terpenuhi.
- ELSE berisi hasil cadangan jika semua kondisi tidak terpenuhi.
- END menutup ekspresi
CASE.
🔀 Dua Bentuk CASE dalam SQL
Secara umum, SQL memiliki dua pola penggunaan CASE. Pilihan pola bergantung pada jenis kondisi yang ingin dibuat.
Digunakan ketika kondisi berisi perbandingan angka, rentang nilai, operator AND, OR, atau pemeriksaan NULL.
Digunakan ketika satu kolom dibandingkan dengan beberapa nilai tertentu seperti status transaksi.
⚠️ Urutan Kondisi Sangat Penting
SQL memproses kondisi CASE WHEN dari atas ke bawah. Ketika menemukan kondisi yang benar, SQL langsung menggunakan hasilnya dan tidak memeriksa kondisi berikutnya.
Jika kondisi
total_spend >= 1000000 diletakkan sebelum total_spend >= 10000000, pelanggan Platinum juga akan langsung masuk ke kategori Silver. Letakkan kondisi dengan batas paling tinggi terlebih dahulu.👥 1. Mengelompokkan Pelanggan Berdasarkan Total Belanja
Contoh paling umum adalah membuat segmentasi pelanggan berdasarkan total nilai belanja. Segmentasi ini dapat digunakan untuk menentukan program loyalitas, prioritas layanan, dan target promosi.
Misalnya, kita memiliki tabel customers dengan kolom id, name, total_spend, dan total_orders.
Fungsi COALESCE digunakan untuk menangani pelanggan yang belum memiliki nilai pada kolom total_spend. Jika nilainya NULL, SQL akan menganggapnya sebagai angka 0.
Membuat Ringkasan Jumlah Pelanggan per Segmen
Setelah kategori pelanggan dibuat, kita dapat menghitung jumlah pelanggan pada setiap segmen menggunakan CTE atau subquery.
📦 2. Mengelompokkan Produk Berdasarkan Harga dan Stok
Dalam katalog produk, angka harga dan stok sering kali belum cukup informatif. Dengan CASE WHEN, kita dapat mengubah angka tersebut menjadi label yang lebih mudah dipahami oleh tim marketing, gudang, dan manajemen.
Perhatikan bahwa satu query dapat memiliki lebih dari satu ekspresi CASE. Pada contoh di atas, produk mendapatkan dua label sekaligus: price_category dan stock_status.
Produk dengan kategori harga Premium dan status stok Menipis dapat langsung diprioritaskan untuk restock sekaligus dimasukkan ke dalam kampanye promosi.
💳 3. Mengelompokkan Transaksi Berdasarkan Nilai
Selain pelanggan dan produk, transaksi juga dapat dikelompokkan berdasarkan nominal. Kategori ini berguna untuk mengetahui distribusi penjualan dan menentukan prioritas penanganan transaksi.
Contoh tersebut menghasilkan label transaksi berdasarkan nilai total_amount. Label ini dapat digunakan untuk laporan penjualan, analisis pelanggan bernilai tinggi, atau aturan promosi tertentu.
Mengubah Status Transaksi Menjadi Label yang Ramah Pengguna
Database biasanya menyimpan status dalam format singkat seperti paid, pending, atau cancelled. Dengan bentuk sederhana CASE, status tersebut dapat diubah menjadi label yang lebih mudah dibaca.
📊 4. Membuat Laporan dengan Conditional Aggregation
Salah satu penggunaan CASE WHEN yang sangat berguna adalah conditional aggregation. Teknik ini memungkinkan kita menghitung nilai berdasarkan kondisi tertentu dalam satu query.
Dengan satu query, kita dapat mengetahui jumlah seluruh transaksi, jumlah transaksi yang sudah dibayar, jumlah transaksi yang masih menunggu pembayaran, dan total pendapatan dari transaksi berhasil.
🧠 5. Menggabungkan Beberapa Kondisi Bisnis
Aturan bisnis sering kali tidak cukup hanya menggunakan satu kondisi. Kita dapat menggunakan AND dan OR untuk membuat klasifikasi yang lebih kompleks.
Pada contoh di atas, pelanggan masuk kategori VIP jika memenuhi dua syarat sekaligus. Sementara itu, pelanggan dapat masuk kategori Pelanggan Loyal jika memenuhi salah satu dari dua syarat yang tersedia.
Gunakan
AND jika semua syarat harus terpenuhi. Gunakan OR jika cukup salah satu syarat yang terpenuhi.🧱 6. Menggunakan CASE WHEN dengan CTE
Ketika ekspresi CASE WHEN cukup panjang, menuliskannya berulang kali di dalam query akan membuat kode sulit dirawat. Common Table Expression atau CTE dapat digunakan untuk memisahkan proses kategorisasi dan proses agregasi.
Dengan pola ini, aturan kategori hanya ditulis satu kali. Hasil kategori kemudian dapat digunakan kembali untuk GROUP BY, ORDER BY, atau analisis lainnya.
↕️ 7. Mengatur Urutan Data dengan CASE WHEN
Secara default, database biasanya mengurutkan data berdasarkan abjad atau angka. Namun dalam laporan bisnis, kita sering membutuhkan urutan khusus. Misalnya, status Habis harus muncul sebelum Menipis dan Aman.
Dengan cara ini, produk yang stoknya habis akan muncul paling atas, kemudian produk dengan stok menipis, dan terakhir produk yang stoknya masih aman.
🚧 Kesalahan Umum Saat Menggunakan CASE WHEN
- Lupa menulis
ELSE. Jika tidak ada kondisi yang terpenuhi, hasilnya biasanya menjadiNULL. - Urutan kondisi terbalik. Kondisi yang terlalu umum dapat mengambil data sebelum kondisi yang lebih spesifik diperiksa.
- Tidak menangani
NULL. GunakanCOALESCE,IS NULL, atauIS NOT NULLsesuai kebutuhan. - Rentang kategori tumpang tindih. Pastikan batas nilai setiap kategori sudah jelas.
- Mengulang logika yang sama terlalu banyak. Gunakan CTE atau subquery jika ekspresi
CASEdipakai di banyak tempat. - Mencampur tipe data hasil. Sebaiknya setiap bagian
THENdanELSEmenghasilkan tipe data yang konsisten.
✅ Best Practice Menggunakan CASE WHEN
- Pastikan semua kondisi bisnis sudah ditulis dari prioritas tertinggi ke terendah.
- Selalu tentukan nilai cadangan menggunakan
ELSE. - Tangani nilai
NULLagar hasil kategori tidak mengejutkan. - Gunakan alias kolom yang jelas seperti
customer_segment,stock_status, atautransaction_category. - Pisahkan logika kategorisasi menggunakan CTE jika query sudah panjang.
- Uji query menggunakan data batas, misalnya harga tepat Rp100.000 atau stok tepat 0.
🎯 Kesimpulan
CASE WHEN adalah fitur SQL yang sederhana, tetapi sangat kuat untuk menerjemahkan data mentah menjadi informasi yang dapat digunakan oleh bisnis.
Dengan CASE WHEN, Anda dapat mengelompokkan pelanggan berdasarkan total belanja, membagi produk berdasarkan harga dan stok, serta mengklasifikasikan transaksi berdasarkan nilai dan status pembayaran.
Ekspresi ini juga dapat digabungkan dengan GROUP BY, SUM, COUNT, ORDER BY, CTE, dan conditional aggregation untuk membuat query yang lebih informatif.
- CASE WHEN digunakan untuk membuat keputusan berbasis kondisi di dalam SQL.
- Gunakan kondisi dari nilai atau prioritas tertinggi ke terendah.
- Tambahkan
ELSEuntuk menangani data yang tidak masuk kategori. - Gunakan
COALESCEuntuk mengatasi nilaiNULL. - Gunakan CTE agar logika kategori tidak ditulis berulang-ulang.
- Pastikan setiap kategori memiliki aturan bisnis yang jelas dan dapat diuji.
❓ FAQ: SQL CASE WHEN
Apakah CASE WHEN hanya bisa digunakan di SELECT?
Tidak. CASE WHEN juga dapat digunakan dalam ORDER BY, fungsi agregasi seperti SUM dan COUNT, serta dalam beberapa skenario GROUP BY. Untuk penggunaan yang kompleks, CTE atau subquery biasanya membuat query lebih mudah dibaca.
Apa yang terjadi jika CASE tidak memiliki ELSE?
Jika tidak ada kondisi yang terpenuhi dan tidak ada ELSE, database biasanya mengembalikan nilai NULL. Karena itu, sebaiknya selalu tambahkan ELSE seperti ELSE 'Tidak Diketahui'.
Apa perbedaan CASE WHEN dengan IF?
CASE WHEN merupakan ekspresi SQL yang lebih umum dan didukung oleh banyak jenis database. Sementara itu, fungsi IF atau IIF dapat berbeda tergantung database yang digunakan. Untuk query yang lebih portabel, CASE WHEN biasanya menjadi pilihan yang lebih aman.
Apakah CASE WHEN dapat digunakan di WHERE?
Bisa, tetapi penggunaannya perlu dipertimbangkan karena dapat membuat query lebih sulit dioptimalkan. Jika tujuan Anda hanya memfilter data, kondisi langsung seperti WHERE price >= 100000 biasanya lebih jelas dan efisien. Gunakan CTE atau subquery jika ingin memfilter berdasarkan alias hasil dari CASE WHEN.
Dibuat oleh:
