SQL Academy · Pelajaran

Ekspresi CASE dan Kueri Pivot

Gunakan CASE WHEN di dalam agregat untuk mengubah tabel panjang menjadi laporan tabulasi silang yang lebar.

Pelajaran 3 dari 413 langkah

Ekspresi CASE dan Kueri Pivot adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

CASE: Percabangan Jika/Lainnya Sebaris untuk SQL

CASE adalah bentuk jika/lainnya di SQL. Ada dua bentuk:

-- Searched CASE
CASE WHEN x > 0 THEN 'positive'
     WHEN x < 0 THEN 'negative'
     ELSE 'zero' END

-- Simple CASE
CASE status
  WHEN 'A' THEN 'active'
  WHEN 'P' THEN 'pending'
  ELSE 'unknown'
END

CASE dalam SELECT

Hitung kolom turunan:

SELECT id, total,
       CASE
         WHEN total >= 1000 THEN 'whale'
         WHEN total >=  100 THEN 'regular'
         ELSE 'small'
       END AS bucket
FROM orders;

CASE dalam WHERE dan ORDER BY

Penyaringan dan pengurutan khusus:

-- Custom sort:
ORDER BY
  CASE WHEN status = 'urgent' THEN 0 ELSE 1 END,
  created_at DESC;

-- Conditional filter:
WHERE CASE WHEN $1 = 'paid' THEN status = 'paid'
           ELSE status IN ('pending','paid')
      END;

CASE di dalam Agregat: Penghitungan Bersyarat

Trik pivot klasik:

SELECT user_id,
       COUNT(*) AS total,
       SUM(CASE WHEN status = 'paid'      THEN 1 ELSE 0 END) AS paid,
       SUM(CASE WHEN status = 'pending'   THEN 1 ELSE 0 END) AS pending,
       SUM(CASE WHEN status = 'cancelled' THEN 1 ELSE 0 END) AS cancelled
FROM orders
GROUP BY user_id;

FILTER: Alternatif yang Lebih Bersih

Klausa FILTER milik PostgreSQL lebih mudah dibaca:

SELECT user_id,
       COUNT(*)                                     AS total,
       COUNT(*) FILTER (WHERE status = 'paid')      AS paid,
       COUNT(*) FILTER (WHERE status = 'pending')   AS pending,
       COUNT(*) FILTER (WHERE status = 'cancelled') AS cancelled
FROM orders
GROUP BY user_id;

Memutar Bulan Menjadi Kolom

Ubah format panjang menjadi format lebar dengan CASE + agregat:

SELECT year,
       SUM(CASE WHEN month =  1 THEN revenue END) AS jan,
       SUM(CASE WHEN month =  2 THEN revenue END) AS feb,
       -- ...
       SUM(CASE WHEN month = 12 THEN revenue END) AS dec
FROM monthly_revenue
GROUP BY year
ORDER BY year;

Memutar Kategori

Satu baris untuk setiap pengguna, satu kolom untuk setiap status:

SELECT user_id,
       SUM(total) FILTER (WHERE status = 'paid')      AS paid_total,
       SUM(total) FILTER (WHERE status = 'pending')   AS pending_total
FROM orders GROUP BY user_id;

Keterbatasan Pivot CASE

Anda harus mengetahui kolom target saat menulis kueri. Untuk pivot dinamis, buat SQL di aplikasi atau gunakan PL/pgSQL prosedural.

CASE dibandingkan COALESCE / NULLIF

COALESCE = "pertama yang bukan NULL". NULLIF = "NULL jika sama". CASE lebih umum — gunakan CASE jika COALESCE/NULLIF tidak sesuai.

Kompatibilitas Tipe

Semua cabang CASE harus menghasilkan tipe yang kompatibel. Lakukan konversi tipe secara eksplisit jika mencampur tipe:

SELECT CASE WHEN x THEN 1::TEXT ELSE 'no' END;

CASE Bertingkat

Percabangan bertingkat:

SELECT CASE
  WHEN amount IS NULL THEN 'no payment'
  WHEN amount = 0     THEN 'free'
  WHEN amount < 10    THEN 'cheap'
  ELSE
    CASE WHEN paid_at IS NULL THEN 'overdue' ELSE 'paid' END
END AS status FROM invoices;

Ringkasan

CASE adalah bentuk universal "jika/lainnya" dalam SQL.

  • Kolom terhitung dalam SELECT
  • Pivot melalui agregat dengan CASE atau FILTER
  • Logika khusus dalam WHERE / ORDER BY

Pemeriksaan Singkat

Klausa mana yang paling mudah dibaca untuk agregasi bersyarat di PostgreSQL?

Gratis untuk memulai

Belajar SQL dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
46
Pelajaran
183

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Ekspresi CASE dan Kueri Pivot” gratis?

Ya — teks lengkap “Ekspresi CASE dan Kueri Pivot” 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 “Ekspresi CASE dan Kueri Pivot”?

Gunakan CASE WHEN di dalam agregat untuk mengubah tabel panjang menjadi laporan tabulasi silang yang lebar. 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 3 dari 4.

Berapa lama pelajaran “Ekspresi CASE dan Kueri Pivot” 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. UNION, INTERSECT, EXCEPT
  2. UNION ALL vs UNION (Biaya Deduplicasi)
  3. Ekspresi CASE dan Kueri Pivot
  4. Pola Crosstab (PostgreSQL crosstab())
← Kembali ke SQL Academy