# CASE WHEN dalam SQL: Panduan Praktis untuk Analisis Data

> Kuasai logika kondisional dengan panduan kami tentang case when sql. Pelajari sintaksis, contoh nyata, dan cara mengubah data menjadi wawasan bisnis.

Source: https://www.electe.net/id/post/case-when-sql

Site guide: https://www.electe.net/id/llms.txt

Jika kamu bekerja dengan data, perintah `CASE WHEN`** di SQL** ibarat pisau lipat serbaguna untuk query-mu. Ini salah satu klausa yang, begitu kamu menemukannya, kamu bakal bertanya-tanya bagaimana bisa selama ini bekerja tanpanya. Perintah ini memungkinkanmu memasukkan logika kondisional (semacam "jika ini terjadi, maka lakukan itu") langsung ke dalam analisismu

Daripada mengekspor ribuan baris ke spreadsheet lalu menyegmentasikan pelanggan atau mengklasifikasikan penjualan secara manual, dengan `CASE WHEN` kamu bisa mengintegrasikan logika ini langsung di dalam query. Bagi kamu, ini berarti laporan yang lebih cepat, analisis yang lebih akurat, dan pada akhirnya, keputusan bisnis yang lebih cerdas. Ini adalah langkah pertama untuk membuat analisis datamu benar-benar proaktif.

## Apa yang sebenarnya dilakukan oleh CASE WHEN dalam SQL?

Bayangkan alur data yang berantakan, seperti antrean mobil di jalan tol. Tanpa aturan, itu hanya barisan panjang kendaraan. `CASE WHEN` bekerja seperti sistem penyortiran pintar: mobil merah ke kiri, mobil biru ke kanan, sisanya lurus sesuai jalurnya masing-masing.

Demikian pula, dalam SQL, Anda dapat mengambil data dan, dengan satu klausa, mengubahnya menjadi informasi yang bersih, terorganisir, dan siap untuk dianalisis.

Bagi sebuah UKM, ini bukan sekadar trik teknis, tetapi keunggulan strategis yang nyata. Analisis data berubah dari proses reaktif yang lambat dan manual menjadi proses proaktif dan instan. Keuntungan bagi bisnis Anda jelas:

- **Pembersihan real-time:** memperbaiki dan menstandardisasi nilai saat proses ekstraksi
- **Kategorisasi dinamis:** mensegmentasikan pelanggan, produk, dan transaksi berdasarkan performa, tanggal, atau nilai
- **Pengayaan kontekstual:** membuat kolom dengan status bisnis ("Pelanggan Setia", "Berisiko")

Pada dasarnya, `CASE WHEN` adalah langkah pertama untuk mengubah datamu dari sekadar angka menjadi insight strategis. Ini adalah jembatan yang menghubungkan tabel mentah dengan laporan yang memungkinkanmu mengambil keputusan yang lebih baik.

Pada bagian-bagian berikutnya, kita akan membahas sintaksis yang tepat dan contoh-contoh praktis untuk menguasai klausa ini dan menyelesaikan masalah bisnis yang konkret.

## Belajar sintaksis case when langkah demi langkah

Untuk menguasai logika kondisional di SQL, hal terbaik adalah mulai dari dasar dan memahami dengan baik struktur `CASE WHEN`. Mari kita mulai dari bentuknya yang paling sederhana, **"CASE Sederhana"**, cocok untuk kamu yang baru memulai.

Versi ini ideal untuk memeriksa nilai-nilai dalam satu kolom dan memberikan hasil yang berbeda untuk masing-masing nilai. Sederhana, rapi, dan efektif.

### Struktur CASE Sederhana

Sintaksnya sangat intuitif. Mari kita lihat contoh praktis: bayangkan kamu punya kolom `StatoOrdine` dengan nilai teks seperti 'Spedito', 'In Lavorazione', atau 'Annullato'. Untuk laporanmu, tentu akan jauh lebih praktis jika ada kode numerik, bukan?

Begini cara mengubah teks tersebut menjadi angka:

`SELECTIDOrdine,StatoOrdine,CASE StatoOrdineWHEN 'Spedito' THEN 1WHEN 'In Lavorazione' THEN 2WHEN 'Annullato' THEN 3ELSE 0 -- Ini adalah jaring pengaman kitaEND AS StatoNumericoFROM Vendite;`

Seperti yang kamu lihat, `CASE` merujuk pada kolom yang akan diperiksa (`StatoOrdine`). Setiap `WHEN` memeriksa apakah nilainya sama dengan sesuatu yang spesifik, dan `THEN` memberikan hasil yang sesuai.

Klausa `ELSE` sangat penting. Ini semacam jaring pengaman: jika tidak ada kondisi `WHEN` yang terpenuhi, klausa ini memberikan nilai default (di sini, `0`), sehingga menghindarkanmu dari hasil `NULL` yang merepotkan. Jika ingin melihat tabel serupa dalam praktik, kamu bisa melihat [contoh database ini](https://www.electe.net/post/esempio-di-database).

### Kekuatan CASE yang Dicari

**"CASE Terarah"** (atau _Searched CASE_) adalah kotak perkakas yang sesungguhnya. Di sinilah fleksibilitas sejati perintah ini muncul, karena kamu tidak lagi terbatas hanya memeriksa satu kolom saja.

Dengan CASE Terarah, kamu bisa membangun kondisi kompleks yang mengevaluasi beberapa kolom sekaligus menggunakan operator logika seperti `AND` dan `OR`, atau operator perbandingan seperti `>` dan `<`. Ini adalah alat yang sempurna untuk menerapkan logika bisnis yang rumit langsung di dalam query-mu.

CASE Terarah tidak hanya sebatas pemeriksaan kesetaraan sederhana. Ia mengevaluasi apakah suatu **kondisi secara keseluruhan bernilai benar**, memberimu kekuatan untuk membuat aturan canggih yang mencerminkan dinamika nyata perusahaanmu.

Misalkan Anda ingin mengklasifikasikan penjualan berdasarkan jumlah dan kategori produk. Berikut cara melakukannya:

`SELECTIDProdotto,Prezzo,Categoria,CASEWHEN Prezzo > 1000 AND Categoria = 'Elettronica' THEN 'Vendita Premium'WHEN Prezzo > 500 THEN 'Vendita Alto Valore'ELSE 'Vendita Standard'END AS SegmentoVenditaFROM Vendite;`

Kemampuan untuk menggabungkan beberapa kondisi inilah yang membuat `CASE WHEN` menjadi pilar yang tak tergantikan bagi analisis data mana pun yang ingin melampaui permukaan.

Berikut adalah tabel yang merangkum perbedaan utama antara kedua sintaksis tersebut, untuk membantu Anda memilih yang tepat pada waktu yang tepat.

### Perbandingan antara sintaksis case sederhana dan case yang dicari

Tabel ini membandingkan secara langsung dua bentuk utama dari klausa CASE, menyoroti kapan masing-masing digunakan dan menampilkan strukturnya secara berdampingan untuk pemahaman yang lebih cepat.

Memilih di antara keduanya bukanlah soal "lebih baik" atau "lebih buruk", tetapi soal menggunakan alat yang paling sesuai untuk pekerjaan yang akan dilakukan. Untuk pemeriksaan langsung dan cepat, CASE Semplice sangat cocok; untuk logika bisnis yang kompleks, CASE Cercato adalah pilihan yang wajib.

Secara visual, kamu bisa membayangkan `CASE WHEN` sebagai pohon keputusan yang mengambil data mentah dan mengarahkannya ke kategori-kategori yang jelas, membawa keteraturan dan kejelasan dalam analisismu.

Gambar ini menunjukkan hal tersebut: bagaimana satu instruksi SQL dapat mengambil setiap pelanggan dan, berdasarkan beberapa aturan, mengarahkannya ke kategori yang tepat. Inilah kekuatan logika kondisional yang diterapkan pada data.

## Bagaimana mengubah data mentah menjadi wawasan bisnis

Sekarang setelah sintaksnya tidak lagi menjadi misteri, saatnya melihat `CASE WHEN` beraksi dalam skenario bisnis nyata. Kekuatan sesungguhnya dari klausa ini muncul ketika kamu menggunakannya untuk mengubah angka dan kode menjadi insight konkret, menjadi indikasi strategis yang nyata bagi perusahaanmu.

Kami akan fokus pada dua aplikasi utama: segmentasi pelanggan dan analisis margin produk. Ini adalah langkah pertama yang krusial untuk mengambil keputusan berdasarkan data, bukan insting.

### Mengelompokkan pelanggan berdasarkan nilai

Salah satu tujuan paling umum bagi perusahaan mana pun adalah memahami siapa pelanggan terbaik mereka. Mengidentifikasi segmen pelanggan dengan nilai **tinggi, menengah, dan rendah** memungkinkanmu menyesuaikan kampanye pemasaran, mengoptimalkan strategi penjualan, dan meningkatkan loyalitas pelanggan.

Dengan `CASE WHEN`, kamu bisa membuat segmentasi ini langsung di dalam query-mu. Bayangkan kamu punya tabel `FatturatoClienti` dengan kolom `ClienteID` dan `TotaleAcquistato`.

Begini cara Anda dapat memberi label pada setiap pelanggan sekaligus:

`SELECTClienteID,TotaleAcquistato,CASEWHEN TotaleAcquistato > 5000 THEN 'Alto Valore'WHEN TotaleAcquistato BETWEEN 1000 AND 5000 THEN 'Medio Valore'ELSE 'Basso Valore'END AS SegmentoClienteFROM FatturatoClientiORDER BY TotaleAcquistato DESC;`

Dengan satu perintah ini saja, kamu telah menambahkan kolom baru, `SegmentoCliente`, yang memperkaya data mentah dengan konteks bisnis yang langsung terlihat. Sekarang kamu bisa dengan mudah menghitung berapa banyak pelanggan di setiap segmen atau menganalisis perilaku pembelian spesifik mereka, meningkatkan ROI dari kampanye pemasaranmu.

### Menghitung dan mengklasifikasikan margin keuntungan produk

Penggunaan strategis lain dari **case when sql** adalah analisis profitabilitas. Tidak semua produk berkontribusi sama besar terhadap keuntungan. Mengklasifikasikan produk berdasarkan margin keuntungannya membantumu memutuskan di mana harus memusatkan usaha, produk mana yang perlu dipromosikan, dan mungkin produk mana yang sebaiknya dihentikan.

Mari kita ambil tabel `Prodotti` dengan `PrezzoVendita` dan `CostoAcquisto`. Pertama-tama kita hitung marginnya, lalu langsung kita klasifikasikan.

`SELECTNomeProdotto,PrezzoVendita,CostoAcquisto,CASEWHEN (PrezzoVendita - CostoAcquisto) / PrezzoVendita > 0.5 THEN 'Alta Marginalità'WHEN (PrezzoVendita - CostoAcquisto) / PrezzoVendita BETWEEN 0.2 AND 0.5 THEN 'Media Marginalità'ELSE 'Bassa Marginalità'END AS CategoriaMarginalitaFROM ProdottiWHERE PrezzoVendita > 0; -- Penting untuk menghindari pembagian dengan nol`

Di sini pun, satu kueri saja telah mengubah kolom harga sederhana menjadi klasifikasi strategis, siap digunakan dalam laporan Anda untuk mengoptimalkan katalog dan memaksimalkan keuntungan.

### Dari SQL ke otomatisasi dengan platform analitik

Kemampuan menulis kueri ini sangat berharga. Namun, apa yang terjadi ketika kebutuhan menjadi lebih kompleks atau ketika manajer non-teknis perlu membuat segmen ini secara instan? Di sinilah platform analitik data tanpa kode modern berperan.

Ini tidak membuat SQL usang, justru sebaliknya, ini memperkuat nilainya. Logikanya tetap sama, tapi eksekusinya menjadi otomatis dan dapat diakses oleh seluruh tim. Hasilnya adalah ROI instan: tim bisnis dapat menjelajahi data dan membuat segmen kompleks tanpa bergantung pada departemen IT, mempercepat secara drastis proses yang membawa [**dari data mentah menjadi informasi yang berguna untuk pengambilan keputusan**](https://www.electe.net/post/dai-dati-grezzi-alle-informazioni-utili-un-viaggio-step-by-step). Para analis, pada gilirannya, bebas untuk fokus pada masalah yang lebih kompleks, karena tahu bahwa analisis rutin sudah ditangani secara otomatis.

## Teknik lanjutan dengan CASE WHEN

Bagus, sekarang setelah Anda memahami dasar-dasar segmentasi, saatnya naik level. Mari kita lihat bersama cara mengubah `CASE WHEN` menjadi alat untuk analisis kompleks dan pelaporan tingkat lanjut, semuanya dalam satu query.

### Membuat "pivot table" dengan fungsi agregasi

Salah satu teknik paling ampuh adalah menggabungkan `CASE WHEN` dengan fungsi agregasi seperti `SUM`, `COUNT`, atau `AVG`. Trik ini memungkinkan Anda membuat "pivot table" langsung di SQL, menghitung metrik spesifik untuk berbagai segmen tanpa perlu menjalankan banyak query.

Misalkan Anda ingin membandingkan, dalam laporan yang sama, total pendapatan yang dihasilkan oleh pelanggan 'Premium' dengan pelanggan 'Standard'. Anda dapat melakukannya sekaligus.

`SELECTSUM(CASE WHEN SegmentoCliente = 'Premium' THEN Fatturato ELSE 0 END) AS FatturatoPremium,SUM(CASE WHEN SegmentoCliente = 'Standard' THEN Fatturato ELSE 0 END) AS FatturatoStandardFROM Vendite;`

Apa yang terjadi di sini? Fungsi `SUM` menjumlahkan `Fatturato` _hanya_ ketika kondisi yang ditentukan dalam `WHEN` bernilai benar. Untuk semua baris lainnya, jumlahnya nol. Ini adalah cara yang sangat efisien untuk mengagregasi data pada beberapa dimensi sekaligus, menghemat waktu dan mengurangi kompleksitas.

### Mengelola logika berlapis dengan kasus bersarang

Terkadang, logika bisnis tidak sesederhana itu. Mungkin Anda perlu mensegmentasi pelanggan tidak hanya berdasarkan berapa banyak yang mereka belanjakan, tetapi juga berdasarkan seberapa sering mereka membeli. Di sinilah logika bertingkat berperan, yang dapat Anda terapkan dengan **menyisipkan satu **`CASE`** di dalam **`CASE`** lainnya**.

`CASE` bersarang memungkinkan Anda membuat sub-kategori yang presisi. Misalnya, kita mungkin ingin membagi pelanggan "Nilai Tinggi" kita menjadi dua kelompok lagi: "Loyal" dan "Sesekali".

`SELECTClienteID,TotaleSpeso,NumeroAcquisti,CASEWHEN TotaleSpeso > 5000 THENCASEWHEN NumeroAcquisti > 10 THEN 'Alto Valore - Fedele'ELSE 'Alto Valore - Occasionale'ENDWHEN TotaleSpeso > 1000 THEN 'Medio Valore'ELSE 'Basso Valore'END AS SegmentoDettagliatoFROM RiepilogoClienti;`

**Perhatikan keterbacaan:** meskipun sangat kuat, `CASE` bersarang bisa menjadi mimpi buruk untuk dibaca dan dipelihara. Jika logikanya melebihi dua tingkat kedalaman, berhentilah. Mungkin sudah saatnya memecah masalah menjadi beberapa langkah, misalnya dengan menggunakan Common Table Expressions (CTE) agar semuanya lebih rapi.

### Mengatasi perbedaan antara berbagai basis data

Meskipun `CASE WHEN` adalah standar SQL yang mapan, ada perbedaan kecil dalam implementasi di berbagai sistem manajemen basis data (DBMS). Mengetahui hal ini sangat penting untuk menulis kode yang portabel.

- **MySQL:** Sepenuhnya sesuai dengan standar. Anda dapat menggunakan `CASE` hampir di mana saja: dalam klausa `SELECT`, `WHERE`, `GROUP BY`, dan `ORDER BY`.
- **PostgreSQL:** Mengikuti standar dengan sangat ketat dan menawarkan penanganan tipe data yang sangat kuat, sehingga konversi tipe di dalam `THEN` ditangani dengan cara yang dapat diprediksi.
- **SQL Server:** Mendukung `CASE` dengan sempurna, tetapi juga menawarkan fungsi non-standar `IIF(kondisi, nilai_jika_benar, nilai_jika_salah)`. `IIF` adalah jalan pintas untuk logika biner sederhana (hanya satu `IF/ELSE`), tetapi `CASE WHEN` tetap menjadi pilihan terbaik untuk keterbacaan dan portabilitas.

Mengetahui nuansa-nuansa ini akan membantu Anda menulis query **case when sql** yang tidak hanya berfungsi, tetapi juga tangguh dan mudah disesuaikan dengan berbagai konteks teknologi.

## Kesalahan umum dan cara mempercepat kueri Anda

Menulis `CASE WHEN` yang berfungsi hanyalah langkah pertama. Lompatan kualitas sesungguhnya terjadi ketika Anda belajar membuatnya tidak hanya benar, tetapi juga cepat dan tahan terhadap kesalahan. Query yang lambat atau penuh bug dapat merusak laporan Anda dan memperlambat pengambilan keputusan bisnis.

Mari kita lihat bersama cara menyempurnakan teknik, menghindari jebakan yang paling umum, dan mengoptimalkan kinerja analisis Anda.

### Perhatikan urutan: trik kecil yang membuat perbedaan besar

Berikut detail yang sering diremehkan: dalam klausa `CASE WHEN`, database menganalisis kondisi dalam urutan persis seperti yang Anda tulis. Begitu menemukan satu yang benar, ia berhenti dan mengembalikan hasilnya.

Perilaku ini memiliki dampak yang sangat besar pada kinerja, terutama saat bekerja dengan tabel yang memiliki jutaan baris.

Triknya? **Selalu letakkan kondisi yang menurut Anda paling sering terjadi di urutan pertama**. Dengan cara ini, mesin database akan melakukan usaha minimal untuk sebagian besar baris, mengurangi waktu eksekusi secara drastis.

### Kesalahan klasik (dan cara menghindarinya)

Bahkan analis yang paling berpengalaman pun kadang-kadang melakukan kesalahan klasik. Mengetahui kesalahan-kesalahan tersebut adalah cara terbaik untuk segera mengidentifikasinya dan memperbaikinya.

- **Melupakan klausa **`ELSE`
Ini adalah kesalahan nomor satu. Jika Anda menghilangkan `ELSE` dan tidak ada kondisi `WHEN` Anda yang terpenuhi, hasil untuk baris tersebut akan berupa `NULL`. `NULL` yang tak terduga ini dapat menimbulkan efek berantai, mengacaukan perhitungan berikutnya.
- **Kode berisiko:**`SELECTPrezzo,CASEWHEN Prezzo > 100 THEN 'Alto'WHEN Prezzo > 50 THEN 'Medio'END AS FasciaPrezzo -- Se Prezzo è 40, il risultato è NULLFROM Prodotti;`
- **Solusi yang aman:**
Selalu tambahkan `ELSE` sebagai jaring pengaman untuk menangkap semua kasus yang tidak terduga.`SELECTPrezzo,CASEWHEN Prezzo > 100 THEN 'Alto'WHEN Prezzo > 50 THEN 'Medio'ELSE 'Basso' -- Ecco la nostra rete di sicurezza!END AS FasciaPrezzoFROM Prodotti;`
- **Tipe data yang bertentangan**
Semua ekspresi setelah `THEN` harus mengembalikan tipe data yang sama (atau tipe yang kompatibel). Jika Anda mencoba mencampur teks, angka, dan tanggal dalam kolom yang sama yang dihasilkan oleh `CASE`, database akan mengembalikan error.
- **Kondisi yang saling tumpang tindih**
Ini adalah kesalahan logika yang lebih licik. Jika Anda memiliki kondisi yang saling tumpang tindih, ingat aturan emasnya: hanya kondisi _pertama_ yang terbukti benar yang akan dieksekusi. Urutan adalah segalanya. Jika Anda menempatkan `WHEN TotaleAcquistato > 1000` sebelum `WHEN TotaleAcquistato > 5000`, tidak ada pelanggan yang akan pernah diberi label 'VIP', karena kondisi pertama akan selalu "menangkapnya" lebih dulu.

### Apakah ada alternatif untuk CASE WHEN?

Meskipun **case when sql** adalah standar universal – dan hampir selalu pilihan terbaik untuk keterbacaan dan kompatibilitas – beberapa dialek SQL menawarkan jalan pintas.

Di [SQL Server](https://www.microsoft.com/sql-server/), misalnya, Anda menemukan fungsi `IIF(kondisi, nilai_jika_benar, nilai_jika_salah)`. Ini praktis untuk logika biner sederhana, tetapi `CASE` tetap tak tertandingi untuk menangani banyak kondisi dan karena kejelasannya dalam skenario kompleks.

Untuk sebagian besar kasus, berpegang pada standar `CASE WHEN` adalah pilihan paling bijak. Ini memastikan bahwa kode Anda dipahami oleh siapa saja dan berfungsi tanpa kejutan di berbagai platform.

## Melampaui CASE WHEN: Ketika SQL tidak lagi cukup

Menulis kueri CASE WHEN sangat berguna. Namun, jika Anda harus menulis ulang logika segmentasi yang sama setiap minggu untuk laporan bulanan, atau lebih buruk lagi, jika tim pemasaran Anda meminta "bisakah Anda menambahkan segmen ini juga?" setiap dua hari, Anda memiliki masalah skalabilitas, bukan masalah SQL.

#### **Ketika menulis query menjadi hambatan utama**

Logika kondisional tetap sama—baik Anda menuliskannya secara manual maupun mendefinisikannya melalui antarmuka—tetapi waktu yang dibutuhkan untuk melakukannya berubah secara drastis. Sebuah kueri yang membutuhkan 20 menit untuk ditulis, diuji, dan didokumentasikan dapat dibuat ulang dalam 2 menit menggunakan antarmuka visual. Kalikan itu dengan semua analisis yang Anda lakukan dalam sebulan, dan Anda akan memahami ke mana waktu Anda pergi.

**Masalah sesungguhnya bukan menulis SQL**. Masalahnya adalah, sementara Anda menulis query, orang lain di tim Anda menunggu data untuk mengambil keputusan. Dan ketika data akhirnya tiba, jendela waktu yang berguna untuk bertindak seringkali sudah menyempit.

Platform seperti ELECTE hal ini: menerjemahkan logika bisnis menjadi kueri. Ini tidak menghilangkan nilai dari kemampuan menulis SQL - sebaliknya, memahami apa yang terjadi di balik layar membuat Anda jauh lebih efektif dalam menggunakan alat analitik apa pun. Namun, ini menghilangkan pekerjaan yang berulang.

Perbedaan praktisnya: daripada menghabiskan berjam-jam untuk menulis dan mendebug kueri untuk mensegmentasi pelanggan, Anda cukup menghabiskan 5 menit untuk mendefinisikan aturan dan sisanya untuk menganalisis apa arti segmen-segmen tersebut bagi bisnis. Ini bukan sihir, ini hanya menghilangkan gesekan antara "saya punya pertanyaan" dan "saya punya jawaban".

Jika Anda menghabiskan setengah hari untuk mengekstrak data daripada menganalisisnya, Anda mungkin sudah menyadari di mana letak kemacetan.

### Dari SQL manual ke wawasan otomatis

Platform seperti ELECTE logika CASE WHEN melalui antarmuka tanpa kode. Tetapkan aturan segmentasi dengan beberapa klik saja, tanpa perlu menulis satu baris kode pun. Hasilnya: analisis yang sebelumnya membutuhkan waktu berjam-jam kini siap dalam hitungan menit, dapat diakses oleh seluruh tim tanpa bergantung pada tim IT.

Di balik layar, platform ini menjalankan logika kondisional yang serupa—dan seringkali jauh lebih canggih—membebaskan Anda dari tugas-tugas yang berulang. Hal ini memungkinkan manajer dan analis untuk fokus pada "mengapa" di balik angka-angka, daripada "bagaimana" mengekstraknya.

## Pertanyaan Umum tentang CASE WHEN

Bahkan setelah melihat banyak contoh, wajar jika Anda masih memiliki beberapa pertanyaan. Mari kita jawab pertanyaan paling umum yang muncul saat mulai menggunakan `CASE WHEN`** di SQL**.

### Apa perbedaan antara CASE dan IF dalam SQL?

Perbedaan utamanya: **portabilitas**. `CASE WHEN` adalah bagian dari standar SQL (ANSI SQL), yang berarti kode Anda akan berfungsi hampir di semua database modern, mulai dari [PostgreSQL](https://www.postgresql.org/) dan [MySQL](https://www.mysql.com/) hingga [SQL Server](https://www.microsoft.com/en-us/sql-server) dan [Oracle](https://www.oracle.com/database/).

Pernyataan `IF()`, sebaliknya, sering kali merupakan fungsi khusus dari dialek SQL tertentu, seperti T-SQL milik SQL Server. Meskipun terlihat lebih singkat untuk kondisi biner sederhana, `CASE WHEN` adalah pilihan para profesional untuk menulis kode yang mudah dibaca dan berfungsi di mana saja tanpa perlu modifikasi.

### Bisakah saya menggunakan CASE WHEN dalam klausa WHERE?

Tentu saja. Ini bukan penggunaan yang paling umum, tetapi dalam skenario tertentu sangat kuat untuk membuat filter kondisional yang kompleks. Bayangkan, misalnya, Anda ingin mengambil semua pelanggan "premium", _atau_ hanya pelanggan "standard" yang tidak melakukan pembelian selama lebih dari satu tahun.

Begini cara Anda dapat mengatur logika:

`SELECT NomeCliente, UltimoAcquistoFROM ClientiWHERECASEWHEN Segmento = 'Premium' THEN 1WHEN Segmento = 'Standard' AND UltimoAcquisto < '2023-01-01' THEN 1ELSE 0END = 1;`

Pada dasarnya, Anda sedang mengatakan kepada database: "hanya pertimbangkan baris-baris di mana logika kompleks ini mengembalikan nilai 1".

### Berapa banyak kondisi WHEN yang bisa saya miliki?

Secara teori, standar SQL tidak menetapkan batas ketat pada jumlah `WHEN`. Namun dalam kenyataannya, sebuah query dengan puluhan kondisi menjadi mimpi buruk untuk dibaca, dipelihara, dan dioptimalkan.

Jika Anda mendapati diri Anda menulis `CASE` yang tidak ada habisnya, anggap itu sebagai tanda peringatan. Kemungkinan ada cara yang lebih cerdas untuk menyelesaikan masalah tersebut, misalnya dengan menggunakan _lookup table_ (tabel pemetaan) agar query menjadi lebih bersih dan efisien.

### Bagaimana CASE WHEN menangani nilai NULL?

Di sinilah Anda perlu berhati-hati. Nilai `NULL` dalam SQL bersifat khusus. Kondisi seperti `WHEN Colonna = NULL` tidak akan pernah berfungsi seperti yang Anda harapkan, karena dalam SQL `NULL` tidak sama dengan apa pun, bahkan dengan dirinya sendiri. Untuk memeriksa apakah suatu nilai adalah `NULL`, sintaks yang benar selalu `WHEN Colonna IS NULL`.

Dalam kasus seperti ini, klausa `ELSE` menjadi sahabat terbaik Anda. Klausa ini memungkinkan Anda menangani secara bersih dan dapat diprediksi semua kasus yang tidak tercakup oleh `WHEN`, termasuk `NULL`. Gunakan untuk menetapkan nilai default dan Anda akan terhindar dari hasil yang tidak terduga dalam analisis Anda.
