0Pricing
SQL Academy · Pelajaran

CASE dalam ORDER BY dan Agregat

Pengurutan dan penghitungan bersyarat.

CASE dalam ORDER BY dan Agregat adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.

Mengurutkan dengan Prioritas Khusus

Klausa ORDER BY SQL biasanya mengurutkan baris berdasarkan nilai alami suatu kolom. Namun, Anda dapat menyisipkan ekspresi CASE di dalam ORDER BY untuk membuat urutan pengurutan yang sepenuhnya khusus—urutan yang tidak dapat dihasilkan oleh satu kolom mana pun.

Teknik ini berguna ketika prioritas ditentukan oleh aturan bisnis, bukan oleh nilai data mentah.

SELECT product_name, status
FROM products
ORDER BY
  CASE status
    WHEN 'urgent'   THEN 1
    WHEN 'active'   THEN 2
    WHEN 'pending'  THEN 3
    ELSE                 4
  END;

Cara Kerja CASE di Dalam ORDER BY

Ketika basis data mengevaluasi ORDER BY CASE ... END, basis data menghitung bilangan bulat (atau nilai lain yang dapat dibandingkan) untuk setiap baris. Baris kemudian diurutkan berdasarkan nilai yang dihitung tersebut, bukan berdasarkan kolom mentah—atau di samping kolom mentah.

Ekspresi CASE tidak disimpan; ekspresi ini hanya ada selama kueri berlangsung.

SELECT order_id, priority
FROM orders
ORDER BY
  CASE priority
    WHEN 'high'   THEN 1
    WHEN 'medium' THEN 2
    WHEN 'low'    THEN 3
    ELSE               9
  END,
  order_id;

Mengurutkan NULL Secara Eksplisit

Secara bawaan, basis data yang berbeda menempatkan NULL di awal atau akhir hasil pengurutan dengan cara yang berbeda. CASE dalam ORDER BY memungkinkan Anda menentukan dengan tepat di mana NULL ditempatkan—apa pun mesin basis datanya.

SELECT employee_name, manager_id
FROM employees
ORDER BY
  CASE WHEN manager_id IS NULL THEN 0 ELSE 1 END,
  manager_id;

Pengurutan Menaik dan Menurun Bersyarat

CASE dalam ORDER BY juga dapat meniru arah pengurutan bersyarat. Dengan memetakan nilai kategori ke angka negatif, Anda secara efektif dapat membalik urutan pengurutan untuk kelompok tertentu sambil mempertahankan urutan normal untuk kelompok lainnya.

Hal ini berguna ketika berbagai jenis baris memerlukan logika pengurutan yang berbeda dalam satu kumpulan hasil.

SELECT task_name, due_date, is_overdue
FROM tasks
ORDER BY
  CASE WHEN is_overdue = 1 THEN 0 ELSE 1 END,
  due_date;

CASE di Dalam COUNT

Anda dapat menyisipkan ekspresi CASE di dalam fungsi agregat seperti COUNT. Caranya adalah mengembalikan nilai yang bukan NULL untuk baris yang ingin dihitung, dan NULL untuk baris yang ingin dilewati—karena COUNT mengabaikan NULL.

SELECT
  COUNT(CASE WHEN status = 'active'   THEN 1 END) AS active_count,
  COUNT(CASE WHEN status = 'inactive' THEN 1 END) AS inactive_count
FROM users;

CASE di Dalam SUM — Total Bersyarat

Menempatkan CASE di dalam SUM memungkinkan Anda menjumlahkan nilai hanya ketika suatu kondisi terpenuhi, dan memperlakukan baris yang tidak cocok sebagai nol. Ini adalah pola yang sangat umum untuk laporan bergaya tabel silang yang memecah satu kolom menjadi beberapa kolom metrik.

SELECT
  SUM(CASE WHEN region = 'North' THEN sales_amount ELSE 0 END) AS north_total,
  SUM(CASE WHEN region = 'South' THEN sales_amount ELSE 0 END) AS south_total,
  SUM(CASE WHEN region = 'East'  THEN sales_amount ELSE 0 END) AS east_total
FROM sales;

AVG Bersyarat dengan CASE

Pola yang sama dapat digunakan dengan AVG. Karena AVG mengabaikan NULL, mengembalikan NULL untuk baris yang ingin dikecualikan akan menghasilkan rata-rata hanya dari baris yang cocok—tanpa memerlukan subkueri.

SELECT
  AVG(CASE WHEN department = 'Engineering' THEN salary END) AS avg_eng_salary,
  AVG(CASE WHEN department = 'Marketing'   THEN salary END) AS avg_mkt_salary
FROM employees;

Pengelompokan dengan CASE — Mengategorikan Baris

Anda dapat menggunakan CASE dalam daftar GROUP BY atau SELECT untuk mengelompokkan nilai kontinu ke dalam kategori, lalu melakukan agregasi pada setiap kategori. Dengan demikian, kolom numerik diubah menjadi kelompok berlabel tanpa mengubah data yang mendasarinya.

SELECT
  CASE
    WHEN age < 18             THEN 'Under 18'
    WHEN age BETWEEN 18 AND 35 THEN '18-35'
    WHEN age BETWEEN 36 AND 55 THEN '36-55'
    ELSE                            '56+'
  END AS age_group,
  COUNT(*) AS user_count
FROM users
GROUP BY
  CASE
    WHEN age < 18             THEN 'Under 18'
    WHEN age BETWEEN 18 AND 35 THEN '18-35'
    WHEN age BETWEEN 36 AND 55 THEN '36-55'
    ELSE                            '56+'
  END;

Menggunakan Alias atau Mengulang CASE

Mengulang ekspresi CASE yang panjang dalam SELECT dan GROUP BY membuat kueri menjadi bertele-tele. Beberapa basis data (MySQL, PostgreSQL dengan solusi tertentu) memungkinkan Anda merujuk ke alias dalam ORDER BY, tetapi tidak dalam GROUP BY. Pendekatan lintas basis data yang paling aman adalah membungkus kueri dalam subkueri atau CTE, lalu menggunakan GROUP BY pada alias dari sana.

WITH scored AS (
  SELECT
    customer_id,
    CASE
      WHEN total_spent >= 1000 THEN 'Gold'
      WHEN total_spent >= 500  THEN 'Silver'
      ELSE                          'Bronze'
    END AS tier
  FROM customers
)
SELECT tier, COUNT(*) AS customer_count
FROM scored
GROUP BY tier
ORDER BY
  CASE tier
    WHEN 'Gold'   THEN 1
    WHEN 'Silver' THEN 2
    ELSE               3
  END;

Menggabungkan ORDER BY CASE dengan ASC / DESC

Setelah ekspresi CASE, Anda tetap dapat menambahkan ASC atau DESC, serta menambahkan kolom pengurutan lain yang dipisahkan dengan koma. Nilai CASE hanyalah kunci pengurutan pertama; kolom berikutnya memecah nilai yang sama dengan cara normal.

SELECT
  ticket_id,
  category,
  created_at
FROM support_tickets
ORDER BY
  CASE category
    WHEN 'billing'  THEN 1
    WHEN 'outage'   THEN 2
    WHEN 'feature'  THEN 3
    ELSE                 4
  END ASC,
  created_at ASC;

Contoh Dunia Nyata — Dasbor Penjualan

Berikut adalah kueri realistis yang menggabungkan agregat berbasis CASE dengan pengurutan berbasis CASE. Kueri ini menghasilkan ringkasan penjualan per wilayah yang diurutkan sehingga wilayah dengan pendapatan tertinggi selalu muncul pertama, sementara 'Other' ditempatkan di bagian paling bawah.

SELECT
  CASE
    WHEN region IN ('North', 'South', 'East', 'West') THEN region
    ELSE 'Other'
  END AS region_label,
  SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END) AS completed_sales,
  COUNT(CASE WHEN status = 'refunded' THEN 1 END)           AS refund_count
FROM orders
GROUP BY
  CASE
    WHEN region IN ('North', 'South', 'East', 'West') THEN region
    ELSE 'Other'
  END
ORDER BY completed_sales DESC;

Uji Pemahaman

Uji pemahaman Anda tentang penggunaan CASE di dalam ORDER BY dan fungsi agregat.

Ringkasan Pelajaran

Dalam pelajaran ini, Anda mempelajari cara menggabungkan CASE dengan ORDER BY dan fungsi agregat:

  • CASE dalam ORDER BY — menetapkan skor pengurutan khusus untuk baris, mengatur posisi NULL, dan menggabungkan beberapa aturan pengurutan dalam satu kueri.
  • CASE dalam COUNT — mengembalikan nilai yang bukan NULL untuk baris yang disertakan, dan NULL (secara implisit atau eksplisit) untuk baris yang dilewati.
  • CASE dalam SUM / AVG — menggunakan 0 atau NULL sebagai nilai ELSE untuk membuat total dan rata-rata bersyarat dalam satu proses.
  • CASE dalam GROUP BY — mengelompokkan nilai kontinu atau kategorikal ke dalam kelompok berlabel untuk agregasi.

Pola-pola ini menghilangkan kebutuhan akan banyak subkueri dan memudahkan penulisan laporan bergaya tabel pivot dalam SQL biasa.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “CASE dalam ORDER BY dan Agregat” gratis?

Ya — teks lengkap “CASE dalam ORDER BY dan Agregat” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “CASE dalam ORDER BY dan Agregat”?

Pengurutan dan penghitungan bersyarat. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai SQL Academy?

Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “CASE dalam ORDER BY dan Agregat” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?

Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Ekspresi CASE
  2. CASE Tersearched vs Sederhana
  3. Mengelompokkan dan Memberi Label Data
  4. CASE dalam ORDER BY dan Agregat
← Kembali ke SQL Academy