Main Logo
  • Home
  • About
  • Kursus
    • Paket Kursus
    • Roadmap Profesi
    • Data & AI
      • Data Analyst
      • Data Scientist
      • AI Engineer
      • Data Engineer
      • Business Intelligence (BI) Specialist
    • Infrastruktur & Keamanan
      • Network Engineer
      • System Engineer
      • DevOps Engineer
      • Security Engineer
      • Cloud Engineer
    • Programming & Web Development
      • Web & App Developer
      • Web Developer
      • WordPress Developer
      • Mobile Developer
    • Spesialisasi
      • Blockchain Engineer
      • IOT Engineer
      • Digital Marketing Specialist
  • Elearning
  • Blog
  • Portfolio
Daftar
Main Logo
  • Home
  • About
  • Kursus
    • Paket Kursus
    • Roadmap Profesi
    • Data & AI
      • Data Analyst
      • Data Scientist
      • AI Engineer
      • Data Engineer
      • Business Intelligence (BI) Specialist
    • Infrastruktur & Keamanan
      • Network Engineer
      • System Engineer
      • DevOps Engineer
      • Security Engineer
      • Cloud Engineer
    • Programming & Web Development
      • Web & App Developer
      • Web Developer
      • WordPress Developer
      • Mobile Developer
    • Spesialisasi
      • Blockchain Engineer
      • IOT Engineer
      • Digital Marketing Specialist
  • Elearning
  • Blog
  • Portfolio

SQL CASE WHEN: Kategori dan Logika Bisnis

  • September 7, 2026
  • oleh Eduardus Defino Ananda Hutama

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.

📌 TL;DR — SQL CASE WHEN
  1. CASE WHEN digunakan untuk membuat logika kondisi langsung di dalam query SQL.
  2. Bisa digunakan untuk mengelompokkan pelanggan, produk, maupun transaksi.
  3. Urutan kondisi sangat penting karena SQL membaca kondisi dari atas ke bawah.
  4. Gunakan ELSE agar data yang tidak memenuhi kondisi tetap memiliki nilai default.
  5. 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”.

👥
Segmentasi Pelanggan
Kelompokkan pelanggan berdasarkan total belanja, jumlah pesanan, atau aktivitas terakhir.
📦
Kategori Produk
Buat kategori harga, status stok, dan tingkat prioritas produk.
💳
Klasifikasi Transaksi
Bedakan transaksi kecil, sedang, besar, berhasil, tertunda, atau dibatalkan.

Sintaks Dasar CASE WHEN

🧩 Struktur DasarSQL
CASE
    WHEN kondisi_1 THEN hasil_1
    WHEN kondisi_2 THEN hasil_2
    ELSE hasil_default
END AS nama_kolom
  • 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.

🔍
Searched CASE

Digunakan ketika kondisi berisi perbandingan angka, rentang nilai, operator AND, OR, atau pemeriksaan NULL.

🏷️
Simple CASE

Digunakan ketika satu kolom dibandingkan dengan beberapa nilai tertentu seperti status transaksi.

🔍 Searched CASESQL
CASE
    WHEN total_spend >= 10000000 THEN 'Platinum'
    WHEN total_spend >= 5000000 THEN 'Gold'
    ELSE 'Silver'
END AS customer_segment
🏷️ Simple CASESQL
CASE status
    WHEN 'paid' THEN 'Sudah Dibayar'
    WHEN 'pending' THEN 'Menunggu Pembayaran'
    WHEN 'cancelled' THEN 'Dibatalkan'
    ELSE 'Status Tidak Dikenal'
END AS status_label

⚠️ 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.

⚠️ Contoh Kesalahan
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.

👥 Segmentasi PelangganSQL
SELECT
    id,
    name,
    total_spend,
    CASE
        WHEN COALESCE(total_spend, 0) >= 10000000 THEN 'Platinum'
        WHEN COALESCE(total_spend, 0) >= 5000000 THEN 'Gold'
        WHEN COALESCE(total_spend, 0) >= 1000000 THEN 'Silver'
        ELSE 'Bronze'
    END AS customer_segment
FROM customers;

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.

📊 Ringkasan Segmen PelangganSQL
WITH customer_segments AS (
    SELECT
        id,
        name,
        total_spend,
        CASE
            WHEN COALESCE(total_spend, 0) >= 10000000 THEN 'Platinum'
            WHEN COALESCE(total_spend, 0) >= 5000000 THEN 'Gold'
            WHEN COALESCE(total_spend, 0) >= 1000000 THEN 'Silver'
            ELSE 'Bronze'
        END AS customer_segment
    FROM customers
)
SELECT
    customer_segment,
    COUNT(*) AS total_customers,
    AVG(total_spend) AS average_spend
FROM customer_segments
GROUP BY customer_segment
ORDER BY
    CASE customer_segment
        WHEN 'Platinum' THEN 1
        WHEN 'Gold' THEN 2
        WHEN 'Silver' THEN 3
        WHEN 'Bronze' THEN 4
    END;
📋 Contoh Interpretasi
Platinum: total belanja paling tinggi.
Gold: pelanggan dengan nilai belanja tinggi.
Silver: pelanggan aktif dengan nilai belanja menengah.
Bronze: pelanggan baru atau pelanggan dengan nilai belanja rendah.

📦 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.

💵
Kategori Harga
Ekonomis, menengah, premium, atau mewah berdasarkan rentang harga.
📉
Status Stok
Habis, menipis, cukup, atau aman berdasarkan jumlah stok.
📦 Kategori Harga dan Stok ProdukSQL
SELECT
    id,
    name,
    price,
    stock,

    CASE
        WHEN price < 100000 THEN 'Ekonomis'
        WHEN price <= 500000 THEN 'Menengah'
        WHEN price <= 2000000 THEN 'Premium'
        ELSE 'Mewah'
    END AS price_category,

    CASE
        WHEN stock IS NULL OR stock <= 0 THEN 'Habis'
        WHEN stock <= 10 THEN 'Menipis'
        WHEN stock <= 50 THEN 'Cukup'
        ELSE 'Aman'
    END AS stock_status

FROM products;

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.

✨ Contoh Penggunaan
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.

💳 Kategori Nilai TransaksiSQL
SELECT
    id,
    customer_id,
    total_amount,

    CASE
        WHEN total_amount < 100000 THEN 'Kecil'
        WHEN total_amount <= 1000000 THEN 'Sedang'
        ELSE 'Besar'
    END AS transaction_category

FROM transactions;

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.

🏷️ Label Status TransaksiSQL
SELECT
    id,
    customer_id,
    status,

    CASE status
        WHEN 'paid' THEN 'Sudah Dibayar'
        WHEN 'pending' THEN 'Menunggu Pembayaran'
        WHEN 'cancelled' THEN 'Dibatalkan'
        WHEN 'refunded' THEN 'Dana Dikembalikan'
        ELSE 'Status Tidak Dikenal'
    END AS status_label

FROM transactions;

📊 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.

📊 Ringkasan Status TransaksiSQL
SELECT
    COUNT(*) AS total_transactions,

    SUM(
        CASE
            WHEN status = 'paid' THEN 1
            ELSE 0
        END
    ) AS paid_transactions,

    SUM(
        CASE
            WHEN status = 'pending' THEN 1
            ELSE 0
        END
    ) AS pending_transactions,

    SUM(
        CASE
            WHEN status = 'paid' THEN total_amount
            ELSE 0
        END
    ) AS paid_revenue

FROM transactions;

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.

🧠 Logika Bisnis GabunganSQL
SELECT
    id,
    name,
    total_spend,
    total_orders,

    CASE
        WHEN total_spend >= 10000000
             AND total_orders >= 10
            THEN 'VIP'

        WHEN total_spend >= 5000000
             OR total_orders >= 5
            THEN 'Pelanggan Loyal'

        WHEN total_orders > 0
            THEN 'Pelanggan Aktif'

        ELSE 'Pelanggan Baru'
    END AS customer_status

FROM customers;

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.

✅ Prinsip Utama
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.

🧱 Kategori lalu AgregasiSQL
WITH transaction_categories AS (
    SELECT
        id,
        total_amount,
        CASE
            WHEN total_amount < 100000 THEN 'Kecil'
            WHEN total_amount <= 1000000 THEN 'Sedang'
            ELSE 'Besar'
        END AS transaction_category
    FROM transactions
)
SELECT
    transaction_category,
    COUNT(*) AS total_transactions,
    SUM(total_amount) AS total_revenue,
    AVG(total_amount) AS average_transaction
FROM transaction_categories
GROUP BY transaction_category
ORDER BY
    CASE transaction_category
        WHEN 'Kecil' THEN 1
        WHEN 'Sedang' THEN 2
        WHEN 'Besar' THEN 3
    END;

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.

↕️ Custom SortingSQL
SELECT
    id,
    name,
    stock,

    CASE
        WHEN stock <= 0 THEN 'Habis'
        WHEN stock <= 10 THEN 'Menipis'
        ELSE 'Aman'
    END AS stock_status

FROM products

ORDER BY
    CASE
        WHEN stock <= 0 THEN 1
        WHEN stock <= 10 THEN 2
        ELSE 3
    END;

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 menjadi NULL.
  • Urutan kondisi terbalik. Kondisi yang terlalu umum dapat mengambil data sebelum kondisi yang lebih spesifik diperiksa.
  • Tidak menangani NULL. Gunakan COALESCE, IS NULL, atau IS NOT NULL sesuai kebutuhan.
  • Rentang kategori tumpang tindih. Pastikan batas nilai setiap kategori sudah jelas.
  • Mengulang logika yang sama terlalu banyak. Gunakan CTE atau subquery jika ekspresi CASE dipakai di banyak tempat.
  • Mencampur tipe data hasil. Sebaiknya setiap bagian THEN dan ELSE menghasilkan tipe data yang konsisten.

✅ Best Practice Menggunakan CASE WHEN

🚀 Checklist Sebelum Query Digunakan
  • Pastikan semua kondisi bisnis sudah ditulis dari prioritas tertinggi ke terendah.
  • Selalu tentukan nilai cadangan menggunakan ELSE.
  • Tangani nilai NULL agar hasil kategori tidak mengejutkan.
  • Gunakan alias kolom yang jelas seperti customer_segment, stock_status, atau transaction_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.

🚀 Rangkuman Praktis
  • CASE WHEN digunakan untuk membuat keputusan berbasis kondisi di dalam SQL.
  • Gunakan kondisi dari nilai atau prioritas tertinggi ke terendah.
  • Tambahkan ELSE untuk menangani data yang tidak masuk kategori.
  • Gunakan COALESCE untuk mengatasi nilai NULL.
  • 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:

Eduardus Defino Ananda Hutama

Tags: DatabaseLogika BisnisQuery SQLsqlSQL CASE WHEN
Previous Post
Next Post

Post comment

Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • Cara Membuat GitHub Pages untuk Portofolio Data Analyst
  • Your Data, Your Rules: Mengapa Self-Hosted Cloud Storage Penting di 2026?
  • Cara Deploy Notebook ke GitHub dengan Dokumentasi Lengkap
  • Menentukan Perangkat Jaringan Bermasalah Menggunakan SQL
  • Navbar Berantakan di HP? Ini Rahasia Bikin Navbar Responsive Auto Rapi Pakai Flexbox

Arsip

  • September 2026
  • August 2026
  • July 2026
  • June 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • September 2025
  • August 2025
  • July 2025
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
  • February 2018
  • January 2018
  • December 2017
  • November 2017
  • October 2017
  • September 2017
  • August 2017
  • July 2017
  • June 2017
  • May 2017
  • April 2017
  • March 2017
  • February 2017
  • January 2017
  • December 2016
  • November 2016
  • October 2016
  • September 2016
  • August 2016
  • July 2016
  • June 2016
  • May 2016
  • April 2016
  • March 2016
  • February 2016
  • January 2016
  • December 2015
  • November 2015
  • October 2015
  • September 2015
  • August 2015
  • July 2015
  • June 2015
  • May 2015
  • April 2015
  • March 2015
  • February 2015
  • January 2015
  • December 2014
  • November 2014
  • October 2014
  • September 2014
  • August 2014
  • July 2014
  • June 2014
  • May 2014
  • April 2014
  • March 2014
  • February 2014
  • January 2014
  • December 2013
  • November 2013
  • October 2013
  • September 2013
  • August 2013
  • July 2013
  • June 2013
  • May 2013
  • April 2013
  • March 2013
  • February 2013
  • January 2013
  • December 2012
  • November 2012
  • October 2012
  • September 2012
  • August 2012
  • July 2012
  • June 2012
  • May 2012
  • April 2012
  • December 2011
  • November 2011

Tags

apache web server dns server kursus android kursus database kursus dns dan web server kursus dns server kursus ethical hacking kursus hacking kursus jaringan kursus jaringan linux Kursus Komputer kursus komputer di solo kursus komputer di solo / surakarta kursus komputer di surakarta kursus linux Kursus Linux Forensics kursus linux networking kursus linux security kursus linux server kursus mikrotik kursus networking kursus network security kursus php Kursus PHP dan MySQL kursus php mysql kursus proxy kursus security kursus ubuntu kursus ubuntu server kursus web kursus web security kursus web server kursus wordpress kursus wordpress theme linux MySQL pelatihan komputer di solo PHP python security training komputer training komputer di solo tutorial php ubuntu wordpress

© Edusoft Center - Kursus Komputer di Solo | 2010 - 2026 | Privacy Policy | Site Map | Portfolio Magang | Butuh tim kami langsung yang mengerjakan? Lihat layanan implementasi →

All Right Reserved

WhatsApp us