Fungsi Array di PostgreSQL untuk Analis
Blog/Tutorial SQL/Fungsi Array di PostgreSQL untuk Analis

Fungsi Array di PostgreSQL untuk Analis

BimaBima
·8 September 2026·9 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Array di PostgreSQL adalah tipe kolom yang bisa nyimpen banyak nilai dalam satu sel, misalnya daftar produk dalam satu transaksi. ARRAY_AGG ngumpulin banyak baris jadi satu array, sedangkan UNNEST ngebalikin array jadi baris-baris terpisah biar bisa dihitung. Buat nyaring, operator ANY ngecek satu nilai ada di array, dan operator contains (@>) ngecek array memuat kumpulan nilai tertentu.

Array di PostgreSQL ngasih kamu cara nyimpen banyak nilai dalam satu kolom, misalnya daftar produk dalam satu transaksi. Nggak perlu tabel tambahan cuma buat nyimpen beberapa nilai per baris.

Buat analis, ini kepakai waktu data alaminya berbentuk daftar. Tag per artikel, produk per struk, skill per pelamar.

Aku bakal bahas cara bikin array, dua fungsi inti ARRAY_AGG dan UNNEST, cara akses elemen, dan operator buat nyaring isi array.

Apa itu tipe array di PostgreSQL?

Array adalah tipe kolom yang nampung banyak nilai sejenis dalam satu sel. Kamu bikinnya dengan nambah kurung siku di tipe dasar, kayak text[] buat daftar teks atau int[] buat daftar angka. Satu baris bisa nyimpen daftar sepanjang apa pun tanpa mecah ke tabel lain.

PostgreSQL nulis isi array pakai kurung kurawal. Misalnya {'beras','gula','minyak'} adalah array tiga teks.

Gimana cara bikin dan nulis array?

Ada dua cara nulis array: pakai konstruktor ARRAY atau kurung kurawal.

SELECT ARRAY[1, 2, 3];        -- {1,2,3}
SELECT '{beras,gula,minyak}'::text[];

Buat kolom bertipe array di tabel:

CREATE TABLE pesanan (
    id_transaksi   INT PRIMARY KEY,
    daftar_produk  TEXT[]
);

INSERT INTO pesanan VALUES
(1, ARRAY['beras','minyak goreng','gula']),
(2, ARRAY['minyak goreng','telur']);

Gimana cara pakai ARRAY_AGG?

ARRAY_AGG ngumpulin banyak baris jadi satu array. Ini fungsi agregat, jadi biasanya dipakai bareng GROUP BY.

SELECT id_transaksi,
       ARRAY_AGG(produk ORDER BY produk) AS daftar_produk
FROM item_transaksi
GROUP BY id_transaksi;

Dari tabel yang tiap barisnya satu produk, kamu dapat satu baris per transaksi dengan produknya terkumpul dalam array. ORDER BY di dalamnya ngatur urutan isi array. Kalau kamu butuh gabung jadi teks bukan array, ada STRING_AGG dan GROUP_CONCAT yang lebih cocok.

Gimana cara pakai UNNEST?

UNNEST jalan berlawanan. Dia mecah satu array jadi banyak baris, satu nilai per baris. Ini penting karena banyak operasi SQL kayak COUNT dan GROUP BY butuh data dalam bentuk baris, bukan array.

SELECT id_transaksi, produk
FROM pesanan, UNNEST(daftar_produk) AS produk;

Transaksi 1 yang punya 3 produk jadi 3 baris. Setelah ini, kamu bisa hitung produk paling sering muncul pakai GROUP BY biasa. Pola mecah nilai jadi baris ini mirip memecah string jadi baris di SQL.

Gimana cara akses elemen dan panjang array?

Indeks array di PostgreSQL mulai dari 1, bukan 0. Elemen pertama diakses dengan kurung siku.

SELECT daftar_produk[1] AS produk_pertama
FROM pesanan;

SELECT array_length(daftar_produk, 1) AS jumlah_item
FROM pesanan;

Angka 1 di array_length nunjuk dimensi pertama, karena array PostgreSQL bisa lebih dari satu dimensi. Buat array biasa, isinya selalu 1.

Gimana cara nyaring baris berdasarkan isi array?

Dua operator paling sering dipakai: ANY buat cek satu nilai, dan contains (@>) buat cek kumpulan nilai.

-- Transaksi yang memuat minyak goreng
SELECT id_transaksi
FROM pesanan
WHERE 'minyak goreng' = ANY(daftar_produk);

-- Transaksi yang memuat beras DAN gula sekaligus
SELECT id_transaksi
FROM pesanan
WHERE daftar_produk @> ARRAY['beras','gula'];

ANY ngecek keberadaan satu nilai. Operator @> ngecek array kiri memuat semua elemen array kanan.

Contoh kasus: analisa keranjang belanja Toko Berkah

Toko Berkah, UMKM kelontong di dataset latihan ngulikdata, nyimpen tiap transaksi dengan kolom daftar_produk bertipe array. Ada 12.480 transaksi selama 2025.

Pertanyaan pemilik: produk apa yang paling sering dibeli barengan minyak goreng? Ini butuh mecah array dulu, baru dihitung.

SELECT teman.produk, COUNT(*) AS jumlah
FROM pesanan p,
     UNNEST(p.daftar_produk) AS teman(produk)
WHERE 'minyak goreng' = ANY(p.daftar_produk)
  AND teman.produk != 'minyak goreng'
GROUP BY teman.produk
ORDER BY jumlah DESC
LIMIT 3;

Hasilnya, dari 4.310 transaksi yang beli minyak goreng, telur nemenin di 1.780 transaksi (41%), disusul gula di 1.240 transaksi. Angka 41% ini yang bikin pemilik naruh telur di rak dekat minyak goreng, biar sekali ambil dua-duanya masuk keranjang.

Kesalahan umum saat pakai array PostgreSQL

1. Ngira indeks mulai dari 0

Array PostgreSQL mulai dari 1. Nulis arr[0] nggak error, tapi balikin NULL. Kalau elemen pertamamu hilang tanpa alasan, cek indeksnya.

2. Lupa UNNEST sebelum agregasi

COUNT dan GROUP BY nggak bisa langsung ngitung isi dalam array. Mecah dulu pakai UNNEST, baru agregasi. Tanpa itu, kamu cuma ngitung jumlah array, bukan jumlah elemennya.

3. Nyimpen data yang harusnya tabel relasi

Array bagus buat daftar sederhana yang jarang diubah. Tapi kalau tiap elemen butuh atribut sendiri, kayak harga dan qty per produk, itu tandanya kamu butuh tabel item_transaksi terpisah, bukan array. Array bukan pengganti relasi.

FAQ

Apa itu tipe array di PostgreSQL?

Array adalah tipe kolom yang bisa nyimpen banyak nilai sekaligus dalam satu sel, misalnya daftar produk dalam satu struk belanja. Kamu bikinnya dengan nambah tanda kurung siku di tipe data, kayak text[] atau int[]. Array berguna waktu satu baris secara alami punya beberapa nilai, tanpa harus bikin tabel terpisah. PostgreSQL punya banyak fungsi khusus buat ngolahnya.

Apa beda ARRAY_AGG dan UNNEST?

ARRAY_AGG jalan berlawanan arah dari UNNEST. ARRAY_AGG ngumpulin banyak baris jadi satu array dalam satu sel, biasanya dipakai bareng GROUP BY. UNNEST kebalikannya, dia mecah satu array jadi banyak baris terpisah, satu nilai per baris. Kamu pakai ARRAY_AGG buat meringkas, dan UNNEST buat ngembangin array biar tiap elemennya bisa difilter atau dihitung.

Gimana cara cek sebuah nilai ada di dalam array?

Pakai operator ANY. Contohnya WHERE 'promo' = ANY(tags) ngecek apakah teks 'promo' ada di dalam array tags. Kalau kamu mau cek array memuat beberapa nilai sekaligus, pakai operator contains yang ditulis @>, misalnya tags @> ARRAY['promo','baru']. ANY buat satu nilai, @> buat ngecek satu array memuat array lain.

Apakah indeks array PostgreSQL mulai dari 0 atau 1?

Array di PostgreSQL mulai dari indeks 1, bukan 0. Jadi elemen pertama diakses dengan arr[1], bukan arr[0]. Ini beda dari kebanyakan bahasa pemrograman kayak Python yang mulai dari 0. Kalau kamu nulis arr[0], PostgreSQL nggak error tapi balikin NULL, yang sering bikin bingung waktu pertama pakai.

Penutup

  • Array nyimpen banyak nilai dalam satu kolom, pas buat data yang alaminya berupa daftar.
  • ARRAY_AGG meringkas baris jadi array, UNNEST ngembangin array balik jadi baris.
  • Pakai ANY buat cek satu nilai dan @> buat cek kumpulan nilai di dalam array.

Coba sekarang: bikin tabel pesanan kecil dengan kolom array, lalu hitung produk paling sering dibeli barengan pakai UNNEST dan GROUP BY.

Mau pendalaman? Cek referensi fungsi ARRAY_AGG dan fungsi UNNEST di ensiklopedia fungsi, plus dokumentasi resmi array PostgreSQL buat daftar operator lengkapnya.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Composite Index di SQL: Cara Kerja dan Urutan Kolom
Tutorial SQL
8 Oktober 2026•8 menit baca

Composite Index di SQL: Cara Kerja dan Urutan Kolom

Composite index itu index atas beberapa kolom sekaligus. Urutan kolomnya nentuin query mana yang kebantu, lewat aturan leftmost prefix.

BimaBima
Menghitung Stickiness (DAU/MAU) di SQL
Tutorial SQL
5 Oktober 2026•10 menit baca

Menghitung Stickiness (DAU/MAU) di SQL

Stickiness ngukur seberapa sering user balik lagi. Ini cara hitung DAU, MAU, dan rasio stickiness pakai SQL, plus contoh aplikasi UMKM.

BimaBima
Menghitung DAU dan MAU dengan SQL
Tutorial SQL
3 Oktober 2026•9 menit baca

Menghitung DAU dan MAU dengan SQL

DAU dan MAU dua metrik wajib buat produk digital. Ini cara hitungnya pakai SQL, lengkap query DISTINCT, per bulan, sampai rasio stickiness.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore