SQL Case: Panduan Lengkap untuk Pemula dalam Analisis Data

SQL CASE adalah statement yang bisa kamu pakai untuk menjalankan operasi kondisional (jika-maka). Bagaimana cara dan contoh penggunaannya?
RevoU Staff
June 21, 2023
7
min read

Mau Belajar

Data Analytics

?

Belajar di RevoU! Dapatkan skill digital paling in-demand langsung dari praktisi terbaik di bidangnya. Kelas online 100% LIVE, 1:1 career coaching, dan akses ke Community Hub dengan 6000+ member selamanya untuk support perkembangan karir kamu!
DAFTAR FULL PROGRAMCOBA COURSE GRATIS

Overview

SQL CASE WHEN memungkinkan kita melakukan operasi kondisional. Lewat artikel ini, kita akan berlatih menggunakan statement ini, beberapa syarat penggunaannya, dan contoh penggunaan SQL CASE dengan fungsi agregat.

Sebagai data analyst, kamu tentu sering berurusan dengan berbagai jenis data.

Salah satu bahasa pemrograman yang sering digunakan dalam analisis data adalah SQL. SQL sendiri memiliki banyak fitur yang bisa diaplikasikan, salah satunya SQL CASE.

Di artikel ini, kita akan membahas pengertian dan contoh penggunaan SQL CASE. Yuk, simak!

Apa itu SQL CASE?

SQL CASE adalah pernyataan dalam SQL yang memungkinkan analyst untuk melakukan operasi kondisional dalam query SQL. Mirip dengan pernyataan if-then-else dalam bahasa pemrograman lain, SQL CASE memeriksa setiap kondisi satu per satu dan mengembalikan nilai setelah menemukan kondisi pertama yang cocok.

Berikut adalah sintaks dasar dari SQL CASE:

Contoh Penggunaan SQL CASE

Kita memiliki tabel "OrderDetails" dengan kolom OrderID, ProductID, dan Quantity. Selanjutnya, kita ingin menambahkan kolom baru "QuantityText" yang menggambarkan jumlah produk dalam teks.

SQL CASE akan memeriksa setiap baris dalam tabel OrderDetails.

  • Jika quantity lebih dari 30, kolom QuantityText akan menampilkan 'Jumlah lebih dari 30'.
  • Jika quantity sama dengan 30, kolom QuantityText akan menampilkan 'Jumlah adalah 30'.
  • Jika kedua kondisi tersebut tidak terpenuhi, kolom QuantityText akan menampilkan 'Jumlah kurang dari 30'.

Berdasarkan nilai quantity tersebut, maka output-nya akan ditampilkan sebagai berikut:

contoh penerapan sql case syntax

Penggunaan SQL CASE dengan Beberapa Kondisi

#1 Kondisi Saling Lepas

Pernyataan CASE akan memeriksa kondisi WHEN dari atas ke bawah dan akan mengembalikan nilai untuk kondisi benar pertama yang ditemukannya. Jadi, pastikan kondisi dalam klausa WHEN tidak tumpang tindih alias beberapa kondisi yang bisa benar pada saat yang sama. 

Misalnya, kamu memasukkan query berikut:

Mari kita lihat jika kita memiliki sebuah baris dengan Quantity 30. Dalam hal ini, dua kondisi WHEN bisa benar pada saat yang sama: Quantity > 20 dan Quantity > 10. Tetapi CASE hanya akan memilih yang pertama sebagai yang benar, yaitu 'Banyak'.

Hal ini bisa menjadi masalah jika kamu mengharapkan 'Sedang' untuk nilai antara 11 dan 20, dan 'Banyak' untuk nilai di atas 20, karena SQL akan memilih 'Banyak' untuk semua nilai di atas 20, bukan hanya nilai di atas 30.

Karena itu hindari pengkondisian yang seperti itu dan buat kondisi yang saling eksklusif atau saling lepas, di mana hanya ada satu kondisi yang bisa benar pada satu waktu. Misalnya:

Pada contoh di atas, hanya ada satu kondisi yang bisa benar pada satu waktu, jadi tidak ada kebingungan atau hasil yang tidak diharapkan. 'Sedang' akan dipilih untuk nilai antara 11 dan 20, dan 'Banyak' akan dipilih untuk nilai di atas 20.

#2 Gunakan ELSE untuk kondisi lainnya

Jika tidak ada kondisi WHEN yang cocok dan kamu tidak menentukan klausa ELSE, maka CASE akan menghasilkan NULL. Karena itu alangkah baiknya untuk selalu menambahkan klausa ELSE untuk memproses pernyataan yang tidak memenuhi kondisi WHEN.

Misalkan kita memiliki tabel Products dengan kolom ProductID dan Price. Kita ingin membuat kolom baru, PriceRange, yang mengkategorikan harga produk. Tanpa klausa ELSE, hasil output yang dikembalikan akan tampak seperti di bawah ini:

Dalam kasus ini, jika harga produk kurang dari atau sama dengan 5000, maka tidak ada kondisi WHEN yang cocok. Dan karena tidak ada klausa ELSE, CASE akan mengembalikan NULL. Jadi, untuk produk dengan harga kurang dari atau sama dengan 5000, PriceRange akan bernilai NULL.

Untuk menghindari hal ini, kita bisa menambahkan klausa ELSE untuk menangani semua kasus lainnya:

Syntax

Output

contoh sql case dengan else

Dalam tabel ini, kita dapat melihat bahwa produk dengan harga lebih dari 10000 dikategorikan sebagai 'Mahal', produk dengan harga lebih dari 5000 tetapi kurang dari atau sama dengan 10000 dikategorikan sebagai 'Sedang', dan produk dengan harga kurang dari atau sama dengan 5000 dikategorikan sebagai 'Murah'.

Jadi, dengan menambahkan klausa ELSE, kita memastikan bahwa setiap baris akan memiliki nilai untuk kolom PriceRange, dan tidak ada yang akan bernilai NULL.

#3 Pastikan tipe data dari THEN dan ELSE sama

Misalkan kita memiliki tabel Products dengan kolom ProductID (integer) dan Price (integer). Kita ingin membuat kolom baru, PriceInfo, yang menampilkan informasi harga dalam teks jika harga lebih dari 5000, dan menampilkan harga asli jika harga kurang dari atau sama dengan 5000.

Berikut adalah contoh query SQL-nya:

Namun, query ini akan menyebabkan error, karena hasil dari THEN adalah teks ('Harga lebih dari 5000'), sementara hasil dari ELSE adalah integer (Price). Ini bertentangan dengan aturan bahwa hasil dari setiap THEN dan ELSE harus memiliki tipe data yang sama.

Untuk memperbaiki ini, kita bisa mengubah Price ke teks menggunakan fungsi CAST atau CONVERT:

Syntax

Dengan pernyataan ini, Price akan dikonversi ke teks jika harga kurang dari atau sama dengan 5000, sehingga PriceInfo akan selalu berisi teks, baik dari THEN maupun ELSE.

Output

sql case

Dalam tabel ini, PriceInfo berisi teks 'Harga lebih dari 5000' untuk produk dengan harga lebih dari 5000, dan berisi harga asli (dikonversi ke teks) untuk produk dengan harga kurang dari atau sama dengan 5000.

SQL CASE dengan Fungsi Agregat

Dalam penerapannya, SQL CASE bisa digunakan bersamaan dengan fungsi agregat seperti COUNT, SUM, AVG, dan lain-lain.

#1 COUNT

Sebagai contoh, kita ingin menghitung jumlah pesanan yang lebih dari 30, sama dengan 30, dan kurang dari 30. Maka SQL CASE akan dipakai dengan fungsi COUNT untuk menghitung jumlah pesanan berdasarkan kondisi yang ditentukan.

Syntax

Output

sql case dengan count

Dalam output ini, kita dapat melihat bahwa ada 125 pesanan dengan quantity lebih dari 30, 30 pesanan dengan quantity yang sama dengan 30, dan 245 pesanan dengan quantity kurang dari 30.

#2 SUM

SQL CASE juga bisa digunakan bersama fungsi SUM untuk mencari total quantity pesanan. Dengan menggunakan contoh yang sama dengan sebelumnya, kita akan mencari total pesanan yang lebih dari 30, sama dengan 30, dan kurang dari 30.

Syntax

Output

contoh sql case dengan sum

Dalam output ini, kita dapat melihat bahwa total quantity pesanan yang lebih dari 30 adalah 7500, total quantity pesanan yang sama dengan 30 adalah 900, dan total quantity pesanan yang kurang dari 30 adalah 4900.

#3 AVERAGE

SQL CASE juga bisa digunakan bersamaan dengan AVG untuk mencari nilai rata-rata. Masih dengan contoh tabel yang sama, kita akan mencari rata-rata pesanan yang lebih dari 30, sama dengan 30, dan kurang dari 30.

Syntax

Output 

sql case dengan average

Dalam output ini, kita dapat melihat bahwa rata-rata 60 pesanan yang lebih dari 30, rata-rata 30 pesanan yang sama dengan 30, dan rata-rata 20 pesanan yang kurang dari 30.

Penggunaan SQL CASE saat Menggabungkan Tabel

CASE bisa dipakai bersamaan pada kondisi ON saat melakukan join atau penggabungan antar tabel. 

Misalkan kita memiliki dua tabel: Customers dan Orders. Kita ingin melakukan join antara kedua tabel tersebut berdasarkan kondisi yang kompleks pada kolom CustomerID dan OrderDate.

Syntax

Kita menggunakan AND dan OR untuk menyatukan beberapa kondisi. Dalam kondisi tersebut, kita ingin melakukan join antara tabel berdasarkan dua rentang tanggal: '2022-01-01' hingga '2022-06-30' atau '2023-01-01' hingga '2023-06-30'. Jika kondisi tersebut terpenuhi, baris-baris yang sesuai dari kedua tabel akan digabungkan.

{{COMPONENT_IDENTIFIER}}

Perhatikan bahwa CASE WHEN tidak digunakan dalam arti tradisional dengan klausa THEN dan ELSE, tetapi digunakan dalam konteks menyusun kondisi yang kompleks dalam klausa ON saat melakukan join antar tabel.

Dalam contoh ini, kita mengambil semua kolom (*) dari tabel Customers dan Orders yang memenuhi kondisi join yang ditentukan. Maka salah satu contoh output-nya adalah:

Output

sql case dengan join table

Dalam output ini, kita melihat beberapa kolom yang diambil dari tabel Customers dan Orders berdasarkan kondisi join yang ditentukan. Baris-baris yang memenuhi kondisi join tersebut ditampilkan dalam hasil output.

Disclaimer bahwa output ini mungkin berbeda tergantung pada struktur tabel dan kolom yang sebenarnya digunakan dalam query. Output ini hanya bertujuan untuk memberikan ilustrasi umum tentang tampilan hasil yang dapat diharapkan dari contoh query dengan penggunaan CASE WHEN pada kondisi ON saat melakukan join antar tabel.

Klausa FILTER sebagai Alternatif CASE-WHEN

Klausa FILTER sebenarnya hanya tersedia dalam beberapa database, termasuk PostgreSQL dan Oracle Database. Klausa ini memang bukan bagian dari standar SQL umum dan tidak didukung secara universal di semua database.

Jika menggunakan database lain yang tidak mendukung klausa FILTER, kita harus menggunakan pendekatan lain, seperti penggunaan CASE WHEN atau fungsi agregat lainnya, sesuai dengan fitur yang didukung oleh database tersebut.

Terlepas dari itu, FILTER dapat menjadi alternatif yang lebih sederhana dan mudah dibaca daripada penggunaan SQL CASE dengan klausa WHEN. Berikut ini adalah contoh penggunaan klausa FILTER sebagai alternatif dari CASE WHEN.

Misalkan kita memiliki tabel "Orders" dengan kolom "OrderID" dan "Quantity". Kita ingin menghitung jumlah pesanan yang lebih dari 30, sama dengan 30, dan kurang dari 30 menggunakan klausa FILTER.

Contoh penggunaan klausa FILTER dengan fungsi COUNT:

Dalam contoh ini, kita menggunakan klausa FILTER untuk memfilter baris berdasarkan kondisi yang ditentukan. Fungsi COUNT(*) digunakan untuk menghitung jumlah baris yang memenuhi kondisi tersebut.

Contoh hasil output:

sql dengan klausa filter

Dalam output ini, kita dapat melihat jumlah pesanan yang lebih dari 30 adalah 125, jumlah pesanan yang sama dengan 30 adalah 30, dan jumlah pesanan yang kurang dari 30 adalah 245.

Dengan menggunakan klausa FILTER, kita dapat melakukan operasi agregasi dengan lebih mudah dan ringkas tanpa perlu menggunakan klausa CASE WHEN.

Kesimpulan

SQL CASE memungkinkan kita melakukan operasi kondisional (jika-maka) dalam query SQL, memeriksa kondisi satu per satu, dan mengembalikan nilai berdasarkan kondisi yang cocok.

Kita telah belajar contoh penggunaan SQL CASE dengan kondisi tunggal dan juga multiple, penggunaan klausa ELSE untuk menangani kasus lainnya, dan pentingnya memastikan tipe data hasil dari THEN dan ELSE sama. 

Selain itu, kita juga melihat bagaimana SQL CASE dapat digunakan bersamaan dengan fungsi agregat seperti COUNT, SUM, dan AVG untuk melakukan analisis data yang lebih kompleks. Dengan pemahaman tentang SQL CASE, kamu dapat mengoptimalkan analisis data SQL kamu dan menghasilkan informasi yang lebih bernilai dari data yang ada.

FAQs

#1 Apakah SQL CASE WHEN hanya berlaku untuk kondisi numerik?

SQL CASE WHEN tidak hanya berlaku untuk kondisi numerik. Kamu dapat menggunakan kondisi apa pun yang mendukung perbandingan, seperti kondisi string atau tanggal.

#2 Apakah SQL CASE WHEN terbatas pada satu kolom saja?

SQL CASE WHEN dapat diterapkan pada berbagai bagian dari query, termasuk dalam SELECT, WHERE, HAVING, dan lain-lain. Kamu dapat menggunakan SQL CASE WHEN untuk mengubah nilai kolom, melakukan filter data, dan melakukan penghitungan kondisional, tergantung pada kebutuhan.

References

RevoU Staff
Kickstart your career in tech with RevoU!

Masih ragu? Coba dulu 3 hari, GRATIS
di Full-Stack Trial Class!

Rasakan pengalaman belajar di RevoU Full-Stack Program: Kelas 100% LIVE, Mini portofolio lewat hands-on assignment, Bimbingan Team Lead & small group discussion. Kalau cocok, kamu bisa lanjut daftar Full Program dengan kesempatan Fast-Track (skip semua tes seleksi masuk, langsung ke tahap akhir!)

Masih ragu? Coba dulu 3 hari, GRATIS
di Full-Stack Trial Class!

Rasakan pengalaman belajar di RevoU Full-Stack Program: Kelas 100% LIVE, Mini portofolio lewat hands-on assignment, Bimbingan Team Lead & small group discussion. Kalau cocok, kamu bisa lanjut daftar Full Program dengan kesempatan Fast-Track (skip semua tes seleksi masuk, langsung ke tahap akhir!)

Masih ragu? Coba dulu 3 hari, GRATIS
di Full-Stack Trial Class!

Rasakan pengalaman belajar di RevoU Full-Stack Program: Kelas 100% LIVE, Mini portofolio lewat hands-on assignment, Bimbingan Team Lead & small group discussion. Kalau cocok, kamu bisa lanjut daftar Full Program dengan kesempatan Fast-Track (skip semua tes seleksi masuk, langsung ke tahap akhir!)

Artikel Lainnya

Mau belajar

Data Analytics

?

Belajar di RevoU! Dapatkan skill digital paling in-demand langsung dari praktisi terbaik di bidangnya. Kelas online 100% LIVE, 1:1 career coaching, dan akses ke Community Hub dengan 6000+ member selamanya untuk support perkembangan karir kamu!
Menu

Mulai karirmu dalam

Data Analytics

Belajar di RevoU! Dapatkan skill digital paling in-demand langsung dari praktisi terbaik di bidangnya. Kelas online 100% LIVE, 1:1 career coaching, dan akses ke Community Hub dengan 6000+ member selamanya untuk support perkembangan karir kamu!

Mau Belajar

Data Analytics

?

Belajar di RevoU! Dapatkan skill digital paling in-demand langsung dari praktisi terbaik di bidangnya. Kelas online 100% LIVE, 1:1 career coaching, dan akses ke Community Hub dengan 6000+ member selamanya untuk support perkembangan karir kamu!

DAFTAR FULL PROGRAM

Mau Belajar

Data Analytics

?