ORDER BY dengan CASE untuk Urutan Kustom di SQL
Blog/Tutorial SQL/ORDER BY dengan CASE untuk Urutan Kustom di SQL

ORDER BY dengan CASE untuk Urutan Kustom di SQL

BimaBima
·30 Oktober 2026·9 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

ORDER BY dengan CASE di SQL bikin kamu bisa urutin hasil query pakai aturan sendiri, bukan cuma A-Z atau angka. CASE ngasih nomor prioritas ke tiap nilai, lalu ORDER BY ngurutin berdasarkan nomor itu. Ini berguna buat urutan status kayak Urgent, Normal, Low, atau urutan hari Senin sampai Minggu yang nggak bisa disortir alfabet.

ORDER BY dengan CASE di SQL bikin kamu bisa ngurutin hasil query pakai aturan sendiri, bukan cuma naik atau turun. Kamu kasih nomor prioritas ke tiap nilai lewat CASE, lalu SQL ngurutin berdasarkan nomor itu.

Ini solusi buat masalah klasik: gimana ngurutin status "Urgent, Normal, Low" biar Urgent selalu di atas? Kalau pakai ORDER BY biasa, hasilnya jadi alfabet: Low, Normal, Urgent. Salah urutan.

Di tutorial ini kamu bakal belajar bikin urutan kustom, urutan hari, sampai sorting bertingkat. Semua pakai contoh data pesanan toko Indonesia.

Apa itu ORDER BY dengan CASE?

ORDER BY dengan CASE adalah teknik ngurutin hasil query pakai ekspresi kondisional. CASE ngecek tiap baris, lalu ngasih nilai angka sesuai aturan yang kamu bikin. ORDER BY kemudian ngurutin baris berdasarkan angka itu, bukan berdasarkan isi kolom aslinya.

Jadi kamu nyisipin logika "kalau nilainya A taruh nomor 1, kalau B nomor 2" langsung di dalam ORDER BY. Hasilnya urutan yang kamu tentuin sendiri.

Kalau kamu belum paham dasar dua bagian ini, baca dulu ORDER BY SQL dan CASE WHEN di SQL. Artikel ini gabungin keduanya jadi satu teknik.

Kenapa ORDER BY biasa nggak cukup?

ORDER BY biasa cuma ngurutin secara alfabet buat teks atau numerik buat angka. Masalahnya, banyak urutan di dunia nyata nggak ngikutin dua pola itu. Status prioritas, tingkat urgensi, dan nama hari punya urutan logis sendiri yang bukan A-Z.

Coba lihat kasus ini. Kamu punya kolom status dengan nilai Urgent, Normal, dan Low. Kamu mau Urgent di atas.

SELECT id_pesanan, status
FROM pesanan
ORDER BY status;

Hasilnya urut alfabet: Low, Normal, Urgent. Persis kebalikan dari yang kamu mau. Di sinilah CASE masuk buat maksa urutan sesuai logika bisnis.

Gimana cara pakai ORDER BY dengan CASE?

Cara pakainya, tulis ekspresi CASE di dalam klausa ORDER BY. Tiap WHEN ngecek satu nilai lalu balikin angka prioritas. Angka paling kecil muncul paling atas kalau urutannya ASC. Berikut struktur dasarnya.

SELECT id_pesanan, status
FROM pesanan
ORDER BY
  CASE status
    WHEN 'Urgent' THEN 1
    WHEN 'Normal' THEN 2
    WHEN 'Low'    THEN 3
    ELSE 4
  END;

Sekarang hasilnya urut sesuai prioritas: semua Urgent dulu, baru Normal, terakhir Low. ELSE 4 jadi jaring pengaman buat nilai yang nggak kamu duga, biar nggak nyelip di atas.

Angka prioritas ini nggak muncul di hasil query. Dia cuma dipakai buat ngurutin di belakang layar. Kolom yang ditampilin tetap status aslinya.

Contoh: urutan hari dan sorting bertingkat

Nama hari itu contoh klasik yang butuh CASE. Kamu nggak bisa urutin Senin sampai Minggu secara alfabet, karena hasilnya jadi Jumat, Kamis, Minggu, dan seterusnya. Kacau.

SELECT hari, SUM(total) AS penjualan
FROM transaksi
GROUP BY hari
ORDER BY
  CASE hari
    WHEN 'Senin'  THEN 1
    WHEN 'Selasa' THEN 2
    WHEN 'Rabu'   THEN 3
    WHEN 'Kamis'  THEN 4
    WHEN 'Jumat'  THEN 5
    WHEN 'Sabtu'  THEN 6
    WHEN 'Minggu' THEN 7
  END;

Sekarang laporan penjualan urut dari Senin ke Minggu, persis kayak kalender. Enak dibaca.

Sorting bertingkat: kustom dulu, baru angka

Kamu bisa gabungin urutan kustom sama sorting biasa. Misalnya, urutin dulu per status prioritas, lalu di dalam tiap status urutin dari nominal terbesar.

SELECT id_pesanan, status, total
FROM pesanan
ORDER BY
  CASE status
    WHEN 'Urgent' THEN 1
    WHEN 'Normal' THEN 2
    WHEN 'Low'    THEN 3
  END,
  total DESC;

Baris diurutin per prioritas dulu. Di dalam grup Urgent, pesanan dengan total terbesar naik ke atas. Ini pola yang sering dipakai buat antrian kerja.

Contoh kasus: prioritas pesanan toko_berkah

Bayangin toko_berkah punya 340 pesanan aktif dengan tiga status pengiriman: Terlambat, Hari Ini, dan Terjadwal. Tim gudang butuh daftar yang naruh pesanan Terlambat paling atas biar cepat ditangani.

Aku pakai ORDER BY dengan CASE buat maksa urutan itu, lalu urutan kedua pakai jam pesan biar yang paling lama nunggu naik duluan.

SELECT id_pesanan, status_kirim, jam_pesan
FROM pesanan
WHERE tanggal = '2026-10-30'
ORDER BY
  CASE status_kirim
    WHEN 'Terlambat'  THEN 1
    WHEN 'Hari Ini'   THEN 2
    WHEN 'Terjadwal'  THEN 3
  END,
  jam_pesan ASC;

Dari 340 pesanan itu, 47 masuk status Terlambat dan langsung nangkring di baris atas. Tim gudang nggak perlu scroll atau filter manual. Ini yang bikin query jauh lebih kepakai dibanding sekadar ORDER BY status.

Buat latihan soal SQL kayak gini, cek take-home test SQL data analyst.

Kesalahan umum saat pakai ORDER BY CASE

Kesalahan paling sering: lupa ELSE, jadi nilai yang nggak terduga malah muncul di posisi acak. Berikut jebakan lain yang bikin urutan berantakan.

  • Nggak ada ELSE. Kalau ada nilai di luar daftar WHEN, CASE balikin NULL. Di banyak database NULL diurutin duluan atau terakhir tergantung setting. Tambah ELSE dengan angka besar biar aman.
  • Salah arah ASC vs DESC. Angka kecil naik kalau ASC. Kalau kamu mau prioritas tinggi di bawah, tambahin DESC atau balik angkanya.
  • Kolom sorting nggak ada di SELECT saat pakai DISTINCT. Beberapa database rewel kalau ekspresi ORDER BY nggak konsisten sama SELECT DISTINCT. Cek pesan errornya.
  • Kepanjangan CASE buat data yang sering berubah. Kalau daftar prioritas sering ganti, mending simpan urutannya di tabel terpisah lalu JOIN, daripada hardcode di query.

FAQ

Apa fungsi ORDER BY dengan CASE di SQL?

Fungsinya buat ngurutin hasil query pakai aturan kustom, bukan cuma alfabet atau angka. CASE ngasih nomor prioritas ke tiap nilai, lalu ORDER BY ngurutin berdasarkan nomor itu. Ini kepakai buat status prioritas, tingkat urgensi, atau nama hari yang punya urutan logis sendiri. Tanpa CASE, kamu terpaksa dapet urutan alfabet yang sering salah, misalnya Low muncul sebelum Urgent.

Apakah angka prioritas di CASE muncul di hasil query?

Nggak. Angka yang kamu tulis di CASE dalam ORDER BY cuma dipakai buat ngurutin di belakang layar. Kolom yang ditampilin tetap nilai aslinya, misalnya status atau nama hari. Kalau kamu memang mau angka prioritas itu keliatan, kamu harus nulis CASE-nya lagi di bagian SELECT sebagai kolom terpisah. Dua bagian itu bekerja mandiri.

Gimana cara sorting bertingkat pakai ORDER BY CASE?

Tulis ekspresi CASE sebagai kriteria pertama di ORDER BY, lalu tambahin koma dan kolom kedua sebagai kriteria berikutnya. Contohnya, ORDER BY CASE status ... END, total DESC. SQL bakal ngurutin per status prioritas dulu, lalu di dalam tiap grup status ngurutin dari total terbesar. Kamu bisa nambah kriteria ketiga dan seterusnya dengan koma lagi sesuai kebutuhan.

Kenapa hasil ORDER BY CASE-ku ada baris yang nyelip di posisi aneh?

Biasanya karena ada nilai yang nggak kecakup di WHEN, jadi CASE balikin NULL buat baris itu. NULL diurutin di awal atau akhir tergantung database, sehingga baris itu keliatan nyelip. Solusinya, tambahin ELSE dengan angka besar, misalnya ELSE 99, biar semua nilai tak terduga jatuh di posisi paling bawah dan urutannya tetap rapi.

Apakah ORDER BY CASE bikin query lambat?

Buat data kecil sampai menengah, dampaknya nggak kerasa. CASE cuma ngevaluasi ekspresi sederhana per baris. Yang bisa bikin lambat adalah kalau ekspresinya rumit atau tabelnya jutaan baris tanpa index yang cocok. Kalau performa jadi masalah, pertimbangkan simpan urutan prioritas di tabel referensi lalu JOIN, karena ini lebih gampang dioptimasi database dibanding CASE panjang.

Rangkuman

ORDER BY dengan CASE ngasih kamu kendali penuh atas urutan hasil query. CASE ngasih nomor prioritas, ORDER BY ngurutin berdasarkan nomor itu, dan kolom aslinya tetap utuh di tampilan.

Ingat dua hal: selalu kasih ELSE buat nilai tak terduga, dan bisa gabung sama sorting biasa buat urutan bertingkat. Buat urutan yang sering berubah, JOIN ke tabel referensi lebih rapi dari CASE panjang.

Mau langsung praktek? Coba query ini di NgulikSQL pakai data kamu sendiri hari ini. Dokumentasi resmi soal ORDER BY juga ada di dokumentasi PostgreSQL.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Fungsi NTH_VALUE di SQL untuk Ambil Nilai ke-N (2026)
Tutorial SQL
29 Desember 2026•9 menit baca

Fungsi NTH_VALUE di SQL untuk Ambil Nilai ke-N (2026)

NTH_VALUE ngambil nilai baris ke-N dalam window, tapi frame default-nya sering bikin hasil NULL. Ini sintaksnya, cara benerin frame, plus contoh transaksi toko.

BimaBima
Running Max dan Min dengan Window Function SQL
Tutorial SQL
26 Desember 2026•11 menit baca

Running Max dan Min dengan Window Function SQL

Lacak nilai tertinggi dan terendah berjalan di SQL pakai window function MAX dan MIN OVER. Ini sintaks, frame clause, dan contoh rekor omzet toko.

BimaBima
Analisa Afinitas Produk (Cross-Sell) dengan SQL
Tutorial SQL
23 Desember 2026•12 menit baca

Analisa Afinitas Produk (Cross-Sell) dengan SQL

Produk apa yang sering dibeli bareng? Analisa afinitas produk pakai SQL self JOIN jawab itu. Ini cara hitung support, confidence, dan lift buat strategi cross-sell.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore