0Pricing
SQL Academy · Pelajaran

Pola Crosstab (PostgreSQL crosstab())

Hasilkan tabel pivot yang sesungguhnya dengan fungsi crosstab() dari ekstensi tablefunc.

Pola Crosstab (PostgreSQL crosstab()) 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.

Mengapa Crosstab yang Sebenarnya?

Pivot CASE mengharuskan Anda mencantumkan setiap kolom target. Untuk pivot yang benar-benar lebar, misalnya satu kolom untuk setiap produk, fungsi crosstab() dari ekstensi tablefunc adalah alat yang tepat.

Mengaktifkan Ekstensi

tablefunc disertakan dalam contrib PostgreSQL:

CREATE EXTENSION IF NOT EXISTS tablefunc;

Tanda Tangan Dasar crosstab

crosstab menerima string SQL dengan tiga kolom (row_key, category, value), lalu mengembalikan row_key dan satu kolom untuk setiap kategori:

SELECT * FROM crosstab(
  $$
    SELECT user_id, status, COUNT(*)::INT
    FROM orders
    GROUP BY user_id, status
    ORDER BY user_id, status
  $$
) AS ct (
  user_id BIGINT,
  paid    INT,
  pending INT,
  cancelled INT
);

Mengapa Anda Mendeklarasikan Kolom Keluaran

SQL memiliki tipe statis — perencana memerlukan kolom keluaran saat penguraian. Jadi, Anda menentukan skema dalam klausa AS, termasuk tipe data.

crosstab Dua Argumen (dengan Himpunan Kategori)

Untuk data yang jarang, berikan daftar kategori secara terpisah agar nilai yang hilang menjadi NULL, bukan menyebabkan ketidaksesuaian:

SELECT * FROM crosstab(
  $$
    SELECT user_id, status, COUNT(*)::INT
    FROM orders GROUP BY user_id, status
    ORDER BY user_id
  $$,
  $$ VALUES ('paid'), ('pending'), ('cancelled') $$
) AS ct (
  user_id BIGINT, paid INT, pending INT, cancelled INT
);

Saat CASE Lebih Baik daripada crosstab

Untuk himpunan kategori yang diketahui dan kecil, CASE/FILTER lebih sederhana — tanpa ekstensi dan tanpa masalah khusus argumen kedua. Gunakan crosstab jika:

  • Anda memiliki banyak kategori
  • Kategori dimuat secara dinamis
  • Anda membuat data untuk konsumen pivot eksternal

Pivot Dinamis

Untuk kategori yang tidak diketahui saat runtime, buat SQL di aplikasi atau gunakan PL/pgSQL dengan format() + EXECUTE.

-- Build the SQL dynamically:
SELECT string_agg(format('SUM(CASE WHEN status = %L THEN 1 END) AS %I',
                          status, status), ', ')
FROM (SELECT DISTINCT status FROM orders) s;

Membuat Pivot Lebar untuk Lembar Kerja

Laporan untuk analis sering memerlukan format lebar. Buat format tersebut dalam SQL, atau serahkan format panjang kepada alat BI dan biarkan alat itu melakukan pivot.

Unpivot: Kebalikannya

Untuk mengubah format lebar → panjang, gunakan UNION ALL atau jsonb_each_text() milik PostgreSQL:

SELECT id, key AS month, (value)::NUMERIC AS revenue
FROM monthly_wide,
     jsonb_each_text(to_jsonb(monthly_wide) - 'id');

Kinerja

crosstab() menjalankan SQL bagian dalam sekali lalu melakukan pivot di memori. Hambatannya sama seperti pada kueri GROUP BY biasa.

Keterbatasan Crosstab

PostgreSQL tidak memiliki kata kunci PIVOT bawaan, berbeda dengan Oracle/SQL Server. crosstab() adalah solusinya.

Ringkasan

Untuk sebagian besar pivot, CASE/FILTER adalah jawaban yang bersih. crosstab() adalah alat Anda ketika kategorinya banyak atau belum diketahui sebelumnya.

Pemeriksaan Singkat

Ekstensi mana yang menyediakan fungsi crosstab() PostgreSQL?

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pola Crosstab (PostgreSQL crosstab())” gratis?

Ya — teks lengkap “Pola Crosstab (PostgreSQL crosstab())” 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 “Pola Crosstab (PostgreSQL crosstab())”?

Hasilkan tabel pivot yang sesungguhnya dengan fungsi crosstab() dari ekstensi tablefunc. 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 “Pola Crosstab (PostgreSQL crosstab())” 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