Ekspresi CASE dan Kueri Pivot
Gunakan CASE WHEN di dalam agregat untuk mengubah tabel panjang menjadi laporan tabulasi silang yang lebar.
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'
ENDCASE 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?
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
- UNION, INTERSECT, EXCEPT
- UNION ALL vs UNION (Biaya Deduplicasi)
- Ekspresi CASE dan Kueri Pivot
- Pola Crosstab (PostgreSQL crosstab())