0Pricing
SQL Academy · Pelajaran

UNNEST dan Agregasi

Ubah array menjadi baris dan sebaliknya.

UNNEST dan Agregasi 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.

Apa Itu UNNEST

PostgreSQL memungkinkan Anda menyimpan larik di dalam satu kolom. Namun, terkadang Anda perlu bekerja dengan setiap elemen secara individual — di situlah UNNEST berperan.

UNNEST adalah fungsi yang mengembalikan kumpulan dan mengembangkan larik menjadi sekumpulan baris, satu baris untuk setiap elemen. Anggaplah ini sebagai kebalikan agregasi: alih-alih meringkas banyak baris menjadi satu, fungsi ini memecah satu nilai menjadi banyak baris.

Contoh Dasar UNNEST

Penggunaan UNNEST yang paling sederhana adalah meneruskan literal larik secara langsung. Setiap elemen menjadi baris tersendiri dalam kumpulan hasil.

Di sini, kita mengembangkan larik bilangan bulat biasa menjadi baris-baris terpisah:

SELECT UNNEST(ARRAY[10, 20, 30, 40]) AS value;

UNNEST dengan Larik Teks

UNNEST bekerja dengan tipe larik apa pun, termasuk teks. Ini berguna ketika Anda memiliki kolom yang menyimpan label, kategori, atau data bergaya dipisahkan koma yang dikodekan sebagai larik PostgreSQL.

SELECT UNNEST(ARRAY['apple', 'banana', 'cherry']) AS fruit;

UNNEST dari Kolom Tabel

Kekuatan UNNEST yang sebenarnya terlihat saat Anda menggunakannya pada kolom tabel nyata. Setiap baris dalam tabel dapat memiliki larik dengan panjang berbeda, dan UNNEST akan mengembangkan semuanya menjadi baris-baris terpisah.

Dalam contoh ini, tabel products memiliki kolom larik teks tags:

CREATE TABLE products (
  id   SERIAL PRIMARY KEY,
  name TEXT,
  tags TEXT[]
);

INSERT INTO products (name, tags) VALUES
  ('Laptop',  ARRAY['electronics', 'computing', 'portable']),
  ('Shirt',   ARRAY['clothing', 'casual']),
  ('Blender', ARRAY['kitchen', 'electronics']);

SELECT name, UNNEST(tags) AS tag
FROM products;

Menghitung Kemunculan Label

Setelah menguraikan kolom larik, Anda dapat memperlakukan hasilnya seperti baris lainnya dan menerapkan fungsi agregat. Di sini, kita menghitung jumlah produk yang terkait dengan setiap label.

Polanya adalah: UNNEST dalam subkueri atau CTE, lalu GROUP BY berdasarkan nilai yang telah diuraikan:

SELECT tag, COUNT(*) AS product_count
FROM (
  SELECT UNNEST(tags) AS tag
  FROM products
) AS expanded
GROUP BY tag
ORDER BY product_count DESC;

UNNEST dengan Ordinalitas

Terkadang posisi suatu elemen di dalam larik penting. PostgreSQL menyediakan WITH ORDINALITY untuk menambahkan nomor baris ke setiap elemen yang dikembangkan, sehingga Anda mengetahui indeks aslinya dalam larik (berbasis 1).

SELECT val, pos
FROM UNNEST(ARRAY['first', 'second', 'third']) WITH ORDINALITY AS t(val, pos);

Menggunakan Ordinalitas pada Tabel

WITH ORDINALITY sangat membantu ketika Anda menyimpan daftar berurutan dalam larik. Contohnya, tabel daftar putar yang memperhatikan urutan trek:

CREATE TABLE playlists (
  id     SERIAL PRIMARY KEY,
  title  TEXT,
  tracks TEXT[]
);

INSERT INTO playlists (title, tracks) VALUES
  ('Morning Mix', ARRAY['Song A', 'Song B', 'Song C']);

SELECT p.title, track, position
FROM playlists p,
     UNNEST(p.tracks) WITH ORDINALITY AS t(track, position)
ORDER BY p.id, position;

Memfilter Setelah UNNEST

Karena UNNEST mengubah elemen larik menjadi baris, Anda dapat memfilternya dengan klausa WHERE biasa. Dengan demikian, Anda dapat menemukan semua baris yang lariknya berisi nilai tertentu tanpa menggunakan operator pemuat larik.

SELECT DISTINCT name
FROM products,
     UNNEST(tags) AS tag
WHERE tag = 'electronics';

Mengagregasikan Kembali Menjadi Larik

Kebalikan dari UNNEST adalah ARRAY_AGG. Setelah mengembangkan baris dan mengubah atau memfilternya, Anda dapat mengumpulkan hasilnya kembali menjadi larik. Pola bolak-balik ini — uraikan, proses, agregasikan kembali — merupakan idiom PostgreSQL yang umum.

SELECT ARRAY_AGG(tag ORDER BY tag) AS sorted_tags
FROM (
  SELECT UNNEST(ARRAY['cherry', 'apple', 'banana']) AS tag
) AS t;

Menghapus Duplikasi Elemen Larik

Salah satu penggunaan praktis dari proses bolak-balik UNNEST dan agregasi adalah menghapus elemen duplikat dari sebuah larik. Terapkan UNNEST pada larik, gunakan DISTINCT, lalu kumpulkan kembali dengan ARRAY_AGG:

SELECT ARRAY_AGG(DISTINCT tag ORDER BY tag) AS unique_tags
FROM UNNEST(ARRAY['sql', 'database', 'sql', 'postgresql', 'database']) AS tag;

Menggabungkan Beberapa Kolom Larik

Anda dapat menerapkan UNNEST pada beberapa larik secara paralel dalam klausa FROM. PostgreSQL memasangkan elemen berdasarkan posisinya. Jika panjang larik berbeda, larik yang lebih pendek menghasilkan NULL untuk posisi tambahan pada larik yang lebih panjang.

SELECT key, value
FROM UNNEST(
  ARRAY['name',    'city',      'role'],
  ARRAY['Alice',   'Istanbul',  'DBA']
) AS t(key, value);

Uji Pemahaman

Uji pemahaman Anda tentang UNNEST dan agregasi larik di PostgreSQL.

Ringkasan Pelajaran

Dalam pelajaran ini, Anda mempelajari cara mengubah larik menjadi baris dan mengembalikannya lagi menggunakan fungsi bawaan PostgreSQL:

  • UNNEST — memperluas larik menjadi satu baris untuk setiap elemen, baik pada literal maupun kolom tabel.
  • WITH ORDINALITY — menambahkan indeks posisi ke setiap elemen hasil UNNEST sehingga Anda mengetahui urutan aslinya dalam larik.
  • Penyaringan — setelah menerapkan UNNEST, Anda dapat menggunakan WHERE seperti pada baris biasa lainnya.
  • ARRAY_AGG — kebalikan dari UNNEST; mengumpulkan kembali baris menjadi larik, secara opsional dengan ORDER BY atau DISTINCT.
  • UNNEST Paralel — beberapa larik dalam klausa FROM diperluas berdampingan dan dipasangkan berdasarkan posisi.

Menguasai pola UNNEST–proses–agregasi ulang ini memungkinkan Anda menangani data larik dengan seluruh kekuatan ekspresif SQL.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “UNNEST dan Agregasi” gratis?

Ya — teks lengkap “UNNEST dan Agregasi” 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 “UNNEST dan Agregasi”?

Ubah array menjadi baris dan sebaliknya. 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 “UNNEST dan Agregasi” 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. Dasar-Dasar Kolom Array
  2. Mencari di Dalam Array
  3. UNNEST dan Agregasi
  4. Array vs Tabel Ternormalisasi
← Kembali ke SQL Academy