CASE WHEN di SQL

Membuat kolom bersyarat, seperti rumus IF di Excel. Kondisi dicek dari atas; yang pertama benar dipakai.

Penjelasan sederhana

CASE WHEN adalah versi SQL dari rumus IF di Excel. Kamu menulis beberapa syarat, dan untuk setiap baris database memeriksa syarat dari atas ke bawah. Syarat pertama yang benar menentukan hasilnya, lalu sisanya diabaikan.

ELSE adalah hasil cadangan kalau tidak ada syarat yang cocok. Seluruh blok selalu ditutup dengan END, dan biasanya diberi nama kolom dengan AS.

Sintaks

CASE
  WHEN kondisi1 THEN hasil1
  WHEN kondisi2 THEN hasil2
  ELSE hasil_lain
END
BagianKeterangan
WHEN ... THENKondisi dan hasilnya. Boleh sebanyak yang dibutuhkan.
ELSEOpsional. Hasil jika tidak ada kondisi yang benar. Tanpa ELSE hasilnya NULL.
ENDWajib, menutup CASE.

Tanda [kurung siku] berarti bagian opsional. Kata kunci SQL tidak membedakan huruf besar-kecil, tapi menulisnya dengan huruf besar membuat query lebih mudah dibaca.

Contoh CASE WHEN

Data contoh: karyawan

Tabel karyawan

idnamadept_idkotagajitgl_masukatasan_id
1 Andi Pratama 3 Bandung 12500000 2019-03-11 NULL
2 Bunga Lestari 1 Jakarta 9800000 2020-07-01 NULL
3 Candra Wijaya 3 Bandung 8200000 2021-02-15 1
4 Dewi Anggraini 2 Jakarta 7500000 2022-05-09 6
5 Eko Saputra 1 Jakarta 6900000 2023-01-16 2
6 Fajar Nugroho 2 Surabaya 11000000 2018-09-03 NULL
7 Gita Permata 3 Jakarta 8200000 2023-08-21 1
8 Hendra Gunawan NULL Medan 5500000 2024-04-02 NULL
query.sql
SELECT nama, gaji,
  CASE
    WHEN gaji >= 10000000 THEN 'Senior'
    WHEN gaji >= 8000000 THEN 'Menengah'
    ELSE 'Junior'
  END AS level
FROM karyawan;
>_ Jalankan & ubah query ini di browser

Hasil 8 baris

namagajilevel
Andi Pratama 12500000 Senior
Bunga Lestari 9800000 Menengah
Candra Wijaya 8200000 Menengah
Dewi Anggraini 7500000 Junior
Eko Saputra 6900000 Junior
Fajar Nugroho 11000000 Senior
Gita Permata 8200000 Menengah
Hendra Gunawan 5500000 Junior

Setiap karyawan diberi label level berdasarkan gajinya.

Cara kerjanya, langkah demi langkah

  1. FROM karyawan: 8 baris diambil.
  2. Untuk Andi (gaji 12,5 juta): syarat pertama gaji >= 10000000 benar, jadi levelnya Senior.
  3. Untuk Bunga (9,8 juta): syarat pertama salah, syarat kedua gaji >= 8000000 benar, jadi levelnya Menengah.
  4. Untuk Dewi (7,5 juta): kedua syarat salah, jadi masuk ELSE, yaitu Junior.
  5. Hasilnya kolom baru bernama level di setiap baris.

Dipakai untuk apa di kantor?

  • Memberi label segmen pelanggan: Gold, Silver, Bronze.
  • Mengubah kode status (1, 2, 3) menjadi teks yang mudah dibaca.
  • Menghitung bersyarat dalam satu query, mirip COUNTIF: SUM(CASE WHEN kota = 'Jakarta' THEN 1 ELSE 0 END).

Kesalahan yang sering terjadi

  • Urutan syarat salah. Kalau gaji >= 8000000 ditulis lebih dulu, Andi juga ikut menjadi Menengah, karena syarat itu sudah benar duluan.
  • Lupa menulis END, sehingga query error.
  • Tidak menulis ELSE. Baris yang tidak cocok dengan syarat mana pun akan bernilai NULL.
Progres bab Logika & NULL 0/3 dipelajari
Lanjut: COALESCE

Belajar SQL bareng mentor

Hafal sintaks itu mudah. Menjawab pertanyaan bisnis, itu skill.

Private Class Python & SQL untuk Data: dari query dasar sampai JOIN dan studi kasus kerja, dengan kurikulum dan jadwal yang menyesuaikan kamu.

Lihat Private Class