CASE WHEN memungkinkan kita mengubah angka mentah seperti total_transaksi menjadi label kategori bisnis — VIP, Reguler, atau Baru — langsung di dalam satu query SQL, tanpa perlu proses manual di Excel atau tools terpisah. Artikel ini membahas cara menyusun CASE WHEN bertingkat untuk segmentasi customer, lengkap dengan contoh data, query, dan cara memvalidasi hasilnya.
VIP
Total transaksi ≥ Rp 10.000.000
Reguler
Total transaksi ≥ Rp 1.000.000
Baru
Daftar tahun 2025 ke atas
Kenapa Segmentasi Customer Ini Dibutuhkan?
Tim marketing sering butuh tahu siapa saja customer yang masuk kategori VIP untuk diprioritaskan dalam campaign, siapa yang Reguler untuk dijaga loyalitasnya, dan siapa yang Baru untuk didorong transaksi keduanya. Masalahnya, data mentah di database biasanya cuma berupa angka total_transaksi — tidak ada kolom yang langsung bilang “customer ini VIP”.
Ada beberapa cara untuk membuat label ini:
- Proses manual di Excel — rawan human error dan tidak scalable kalau datanya ribuan baris.
- Bikin tabel referensi terpisah — lebih rapi untuk aturan yang kompleks, tapi jadi overkill untuk aturan sederhana seperti ini.
- CASE WHEN langsung di SQL — cepat, langsung terintegrasi dengan query lain, dan aturan bisnisnya terlihat jelas di dalam query itu sendiri.
Untuk kasus segmentasi sederhana berdasarkan ambang batas angka, CASE WHEN adalah pilihan paling efisien karena tidak perlu maintain tabel tambahan.
Bagaimana Struktur Data Customer-nya?
Anggap kita punya tabel customers dengan struktur berikut (gunakan data dummy, jangan data pengguna asli):
Mau Kuasai CASE WHEN Bertingkat di SQL: Segmentasi Customer Berdasarkan Total Transaksi (VIP, Reguler, Baru) Sampai Bisa Praktik Langsung?
Materi ini juga kami ajarkan langsung di kelas Edusoft Center, dibimbing mentor, sampai kamu bisa praktik nyata — bukan cuma baca teori.
Tanya Kursus via WhatsApp Lihat contoh project nyata dari siswa kami →
| Kolom | Tipe Data | Keterangan |
|---|---|---|
| id | INT | ID unik customer |
| nama | VARCHAR | Nama customer (dummy) |
| total_transaksi | INT | Total nilai transaksi (Rp) |
| tanggal_daftar | DATE | Tanggal customer mendaftar |
Contoh isi data dummy:
CREATE TABLE customers (
id INT PRIMARY KEY,
nama VARCHAR(50),
total_transaksi INT,
tanggal_daftar DATE
);
INSERT INTO customers (id, nama, total_transaksi, tanggal_daftar) VALUES
(1, 'Customer A', 15000000, '2023-01-10'),
(2, 'Customer B', 3200000, '2024-05-22'),
(3, 'Customer C', 850000, '2025-06-01'),
(4, 'Customer D', 22000000, '2022-11-15'),
(5, 'Customer E', 500000, '2026-07-30');
Bagaimana Menulis Query CASE WHEN untuk Segmentasi?
Versi Dasar: Satu Kondisi
Mulai dari kondisi paling sederhana — menandai siapa yang VIP:
SELECT
nama,
total_transaksi,
CASE
WHEN total_transaksi >= 10000000 THEN 'VIP'
ELSE 'Bukan VIP'
END AS kategori
FROM customers;
Versi Bertingkat: Tiga Kategori
Selanjutnya kita perluas jadi tiga kategori: VIP, Reguler, dan Baru. Urutan kondisi di sini penting karena SQL mengevaluasi CASE WHEN dari atas ke bawah dan berhenti di kondisi pertama yang terpenuhi:
SELECT
nama,
total_transaksi,
tanggal_daftar,
CASE
WHEN total_transaksi >= 10000000 THEN 'VIP'
WHEN total_transaksi >= 1000000 THEN 'Reguler'
WHEN tanggal_daftar >= DATE '2025-01-01' THEN 'Baru'
ELSE 'Perlu Diaktivasi'
END AS kategori
FROM customers;
Kenapa urutannya begitu: kondisi dengan ambang batas tertinggi (VIP) ditaruh paling atas. Kalau urutannya dibalik — misalnya kondisi Reguler ditaruh sebelum VIP — maka customer dengan
total_transaksi22 juta pun bisa salah kena label Reguler, karena SQL akan langsung mengambil kondisi pertama yang cocok tanpa mengecek kondisi selanjutnya.
Bagaimana Memvalidasi Hasilnya Benar?
Setelah query di atas jalan, validasi dengan menghitung jumlah customer di tiap kategori menggunakan subquery dan GROUP BY:
SELECT
kategori,
COUNT(*) AS jumlah_customer
FROM (
SELECT
CASE
WHEN total_transaksi >= 10000000 THEN 'VIP'
WHEN total_transaksi >= 1000000 THEN 'Reguler'
WHEN tanggal_daftar >= DATE '2025-01-01' THEN 'Baru'
ELSE 'Perlu Diaktivasi'
END AS kategori
FROM customers
) AS sub
GROUP BY kategori
ORDER BY jumlah_customer DESC;
Cocokkan hasilnya secara manual dengan data mentah untuk 1-2 baris — misalnya cek langsung apakah Customer D (22 juta) memang muncul di kategori VIP dan bukan di kategori lain.
Apa Kesalahan Umum Saat Pakai CASE WHEN Bertingkat?
- Lupa menambahkan
ELSE— kalau tidak ada baris yang cocok dengan semua kondisiWHEN, hasilnya akanNULL, bukan error. Ini sering lolos tanpa disadari. - Urutan kondisi terbalik — kondisi dengan syarat lebih ketat (nilai lebih tinggi) harus ditaruh lebih dulu.
- Kondisi tumpang tindih tanpa disadari — kondisi kedua ternyata juga mencakup kasus yang seharusnya masuk kondisi pertama, sehingga sebagian data “tercuri” oleh kondisi yang salah.
- Membandingkan tipe data yang tidak sesuai — misalnya membandingkan
tanggal_daftar(tipe DATE) dengan string biasa tanpa fungsi konversi, yang bisa menyebabkan hasil tidak konsisten tergantung database yang dipakai.
Kesimpulan
VIP · Reguler · Baru
CASE WHEN bertingkat adalah cara paling efisien untuk mengubah data numerik mentah menjadi label kategori bisnis langsung di level SQL, tanpa perlu tabel referensi tambahan untuk aturan yang sederhana. Kuncinya ada di urutan kondisi (dari yang paling ketat ke paling longgar) dan selalu menyertakan ELSE agar tidak ada data yang lolos tanpa kategori. Untuk aturan segmentasi yang jauh lebih kompleks atau sering berubah, sebaiknya pindah ke tabel referensi terpisah agar lebih mudah di-maintain.
Penulis : Siti Fatimah Nur Azzahra
Mau Kuasai CASE WHEN Bertingkat di SQL: Segmentasi Customer Berdasarkan Total Transaksi (VIP, Reguler, Baru) Sampai Bisa Praktik Langsung?
Materi ini juga kami ajarkan langsung di kelas Edusoft Center, dibimbing mentor, sampai kamu bisa praktik nyata — bukan cuma baca teori.
Tanya Kursus via WhatsApp Lihat contoh project nyata dari siswa kami →
