0Pricing
SQL Interview Prep · Pelajaran

Mengubah Kolom Menjadi Baris

Membalik tabel lebar dengan UNPIVOT atau UNION ALL.

Mengubah Kolom Menjadi Baris adalah pelajaran SQL Interview Prep 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 Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Masalah Kebalikan

Membalikkan pivot adalah kebalikan dari pivot: Anda mengambil tabel lebar dan mengubah kolomnya kembali menjadi baris. Pewawancara menanyakan hal ini ketika data tiba dalam bentuk lembar bentang, tetapi perlu dinormalisasi untuk analisis.

Contoh: tabel dengan kolom q1, q2, q3, q4 untuk setiap wilayah harus diubah menjadi baris-baris (region, quarter, amount). Bentuk panjang ini paling sesuai untuk agregasi, penggabungan, dan pembuatan grafik.

-- Wide input we want to unpivot
region | q1  | q2  | q3  | q4
-------+-----+-----+-----+----
East   | 100 | 150 | 120 | 180
West   | 200 | 250 | 210 | 260

Pola UNION ALL yang Kompatibel Lintas Sistem

Jawaban yang tidak bergantung pada dialek adalah UNION ALL: tulis satu SELECT untuk setiap kolom sumber, dan masing-masing menghasilkan label tetap serta nilai dari kolom tersebut.

Gunakan UNION ALL, bukan UNION, agar Anda tidak perlu membayar biaya penghapusan duplikasi dan tetap menyimpan setiap baris, bahkan ketika dua sel memiliki nilai yang sama.

SELECT region, 'Q1' AS quarter, q1 AS amount FROM wide_sales
UNION ALL
SELECT region, 'Q2', q2 FROM wide_sales
UNION ALL
SELECT region, 'Q3', q3 FROM wide_sales
UNION ALL
SELECT region, 'Q4', q4 FROM wide_sales;

Mengapa UNION ALL, Bukan UNION

Ini adalah jebakan wawancara klasik. UNION menghapus baris duplikat di seluruh hasil. Jika East dan West sama-sama memiliki 100 untuk Q1, UNION biasa akan menggabungkan baris yang identik dan Anda akan kehilangan data.

UNION ALL menggabungkan baris tanpa menghapus duplikasi, sesuai dengan kebutuhan pembalikan pivot. Operasi ini juga lebih cepat karena tidak memerlukan pengurutan atau pembuatan struktur untuk menghapus duplikasi.

-- UNION would wrongly merge identical (region, quarter, amount) rows
-- UNION ALL keeps every row, always the correct choice here

Penyelarasan Jenis Kolom

Setiap cabang UNION ALL harus menghasilkan jumlah kolom yang sama, dengan jenis yang kompatibel dan dalam urutan yang sama. Nama kolom diambil dari SELECT pertama.

Jika kolom lebar Anda memiliki jenis yang berbeda (misalnya, satu berupa int dan lainnya decimal), mesin database akan memilih jenis yang sama-sama dapat menampungnya. Jika keduanya benar-benar tidak kompatibel, lakukan konversi secara eksplisit agar union tidak gagal.

SELECT region, 'revenue' AS metric, CAST(revenue AS decimal(12,2)) AS val FROM t
UNION ALL
SELECT region, 'units',   CAST(units   AS decimal(12,2))        FROM t;

UNPIVOT SQL Server

SQL Server memiliki operator UNPIVOT khusus yang lebih ringkas daripada UNION ALL. Anda menyebut kolom nilai baru, kolom label baru, dan mencantumkan kolom sumber yang akan digabungkan.

Satu perilaku penting: UNPIVOT menghapus baris yang nilainya NULL. Pewawancara menguji apakah Anda mengetahui efek samping ini.

SELECT region, quarter, amount
FROM wide_sales
UNPIVOT (
  amount FOR quarter IN (q1, q2, q3, q4)
) AS u;

UNPIVOT Menghapus NULL

Jika suatu wilayah memiliki NULL dalam q3, UNPIVOT SQL Server cukup menghilangkan baris tersebut dari output. Jika Anda memerlukan satu baris untuk setiap kolom tanpa memedulikan NULL, gunakan kembali UNION ALL, yang mempertahankan baris tersebut.

Sampaikan pertukaran ini dalam wawancara: UNPIVOT bawaan memang ringkas, tetapi kehilangan data pada NULL; UNION ALL lebih panjang, tetapi lengkap.

-- UNPIVOT: q3 NULL for East -> no (East, Q3) row produced
-- UNION ALL: (East, 'Q3', NULL) row IS produced

PostgreSQL: LATERAL VALUES

PostgreSQL tidak memiliki UNPIVOT, tetapi pola yang rapi adalah CROSS JOIN LATERAL di atas daftar VALUES. Setiap baris lebar diperluas dengan tabel sebaris kecil yang berisi pasangan (label, nilai).

Pola ini lebih rapi daripada UNION ALL yang panjang dan membaca tabel sumber hanya satu kali.

SELECT w.region, v.quarter, v.amount
FROM wide_sales w
CROSS JOIN LATERAL (VALUES
  ('Q1', w.q1),
  ('Q2', w.q2),
  ('Q3', w.q3),
  ('Q4', w.q4)
) AS v(quarter, amount);

Membaca Tabel Satu Kali

Hal kinerja yang layak disampaikan: UNION ALL naif memindai tabel lebar satu kali untuk setiap cabang (empat pemindaian untuk empat kuartal). Bentuk LATERAL VALUES dan UNPIVOT SQL Server membaca sumber satu kali.

Pada tabel besar, ini penting. Jika Anda harus menggunakan UNION ALL, pengoptimal mungkin tetap memindai berulang kali, jadi sebutkan LATERAL atau UNPIVOT sebagai pilihan yang lebih efisien.

Menyaring Sel Kosong

Dengan UNION ALL atau LATERAL, baris dengan nilai NULL tetap dipertahankan. Jika pertanyaannya hanya menginginkan sel yang terisi, tambahkan penyaring. Ini meniru perilaku UNPIVOT SQL Server.

Menentukan apakah NULL harus dipertahankan atau dibuang bergantung pada konteks, jadi pastikan persyaratannya kepada pewawancara sebelum menulis kode.

SELECT region, quarter, amount
FROM (
  SELECT region, 'Q1' AS quarter, q1 AS amount FROM wide_sales
  UNION ALL SELECT region, 'Q2', q2 FROM wide_sales
) t
WHERE amount IS NOT NULL;

Contoh Kerja: Agregasi Setelah Mengubah Kolom Menjadi Baris

Pertanyaan lanjutan yang umum: "dari tabel triwulanan berbentuk lebar, berikan total pendapatan per wilayah di semua kuartal." Setelah diubah ke bentuk panjang, agregasinya sederhana: satu SUM yang dikelompokkan berdasarkan wilayah.

Ini menunjukkan alasan sebenarnya untuk mengubah kolom menjadi baris terlebih dahulu. Menjumlahkan empat kolom terpisah rawan masalah, sedangkan SUM(amount) GROUP BY region dalam bentuk panjang dapat menangani jumlah kuartal berapa pun.

WITH long_sales AS (
  SELECT region, 'Q1' AS quarter, q1 AS amount FROM wide_sales
  UNION ALL SELECT region, 'Q2', q2 FROM wide_sales
  UNION ALL SELECT region, 'Q3', q3 FROM wide_sales
  UNION ALL SELECT region, 'Q4', q4 FROM wide_sales
)
SELECT region, SUM(amount) AS total
FROM long_sales
GROUP BY region;

Kapan Mengubah Kolom Menjadi Baris

Kenali tanda-tanda perlunya mengubah kolom menjadi baris dalam soal:

  • Masukan memiliki kolom berulang yang sebenarnya merupakan nilai (bulan, tahun, metrik).
  • Anda perlu melakukan agregasi, penggabungan, atau pembuatan grafik berdasarkan nilai-nilai tersebut.
  • Anda ingin menormalkan data lembar kerja yang belum ternormalisasi saat mengimpornya.

Bentuk panjang hampir selalu merupakan bentuk yang tepat untuk pekerjaan SQL selanjutnya, sehingga mengubah kolom menjadi baris sering menjadi langkah pertama.

Pemeriksaan Singkat

Pastikan Anda mengetahui jebakan yang paling umum saat mengubah kolom menjadi baris.

Ringkasan

Mengubah kolom menjadi baris berarti mengubah kolom menjadi baris:

  • Portabel: satu SELECT untuk setiap kolom yang digabungkan dengan UNION ALL (jangan gunakan UNION biasa).
  • SQL Server: UNPIVOT bawaan, ringkas tetapi menghapus nilai NULL.
  • PostgreSQL: CROSS JOIN LATERAL (VALUES ...), dengan satu kali pemindaian.
  • Selaraskan jumlah dan tipe kolom di seluruh cabang; saring NULL jika diperlukan oleh pertanyaan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengubah Kolom Menjadi Baris” gratis?

Ya — teks lengkap “Mengubah Kolom Menjadi Baris” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Interview Prep, upgrade ke CoddyKit PRO. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mengubah Kolom Menjadi Baris”?

Membalik tabel lebar dengan UNPIVOT atau UNION ALL. Kamu berlatih SQL Interview Prep 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 Interview Prep?

Tidak diperlukan pengalaman sebelumnya. SQL Interview Prep 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 “Mengubah Kolom Menjadi Baris” 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 Interview Prep ini?

Ya. Setiap pelajaran SQL Interview Prep 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. Mengubah Baris Menjadi Kolom dengan Agregasi Bersyarat
  2. Sintaks PIVOT dan Crosstab Vendor
  3. Mengubah Kolom Menjadi Baris
  4. PIVOT Dinamis dengan Kolom yang Belum Diketahui
← Kembali ke SQL Interview Prep