STRING_AGG dan GROUP_CONCAT di SQL
Blog/Tutorial SQL/STRING_AGG dan GROUP_CONCAT di SQL

STRING_AGG dan GROUP_CONCAT di SQL

BimaBima
·5 September 2026·8 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

STRING_AGG (PostgreSQL dan SQL Server) dan GROUP_CONCAT (MySQL dan SQLite) adalah fungsi agregasi yang nggabungin nilai teks dari banyak baris jadi satu string, dipisah dengan pemisah yang kamu tentuin. Keduanya dipakai bareng GROUP BY, dan bisa diurutkan pakai ORDER BY di dalamnya serta disaring duplikatnya pakai DISTINCT. Contoh paling umum: bikin daftar produk per order jadi satu kolom.

STRING_AGG di PostgreSQL dan GROUP_CONCAT di MySQL nggabungin nilai teks dari banyak baris jadi satu string yang dipisah pemisah pilihanmu, dalam satu GROUP BY.

Bayangin tabel detail order yang tiap produknya satu baris. Kalau kamu mau nampilin semua produk per order dalam satu kolom, dipisah koma, dua fungsi ini yang ngerjain. Nggak perlu loop atau proses di luar database.

Di artikel ini kamu bakal belajar sintaks keduanya, cara ngatur urutan dan buang duplikat, plus contoh nyata dari data order UMKM.

Apa itu STRING_AGG dan GROUP_CONCAT?

Keduanya fungsi agregasi teks. Kalau fungsi kayak SUM ngeringkas angka jadi satu total, STRING_AGG dan GROUP_CONCAT ngeringkas teks dari banyak baris jadi satu string gabungan. STRING_AGG dipakai di PostgreSQL dan SQL Server, sedangkan GROUP_CONCAT dipakai di MySQL dan SQLite.

Karena keduanya fungsi agregasi, mereka selalu jalan bareng GROUP BY. Sama kayak agregasi lain, dia ngeringkas satu grup jadi satu baris hasil. Bedanya cuma outputnya berupa teks, bukan angka.

Gimana sintaks STRING_AGG di PostgreSQL?

STRING_AGG minta dua argumen: kolom teks yang mau digabung dan pemisahnya. Kamu bisa nambahin ORDER BY di dalam kurung buat ngatur urutan hasilnya.

SELECT
  order_id,
  STRING_AGG(produk, ', ' ORDER BY produk) AS daftar_produk
FROM detail_order
GROUP BY order_id;

Hasilnya satu baris per order, dan kolom daftar_produk isinya semua produk order itu dipisah koma, terurut alfabet. ORDER BY di dalam STRING_AGG penting biar urutannya konsisten tiap kali query dijalanin.

Kalau ada nilai kembar dan kamu cuma mau yang unik, tambahin DISTINCT:

SELECT
  pelanggan_id,
  STRING_AGG(DISTINCT kategori, ', ') AS kategori_dibeli
FROM detail_order
GROUP BY pelanggan_id;

Gimana sintaks GROUP_CONCAT di MySQL?

GROUP_CONCAT beda dikit. Pemisahnya ditulis pakai kata kunci SEPARATOR, dan kalau nggak diisi, default-nya koma tanpa spasi. ORDER BY dan DISTINCT juga ditaruh di dalam kurung.

SELECT
  order_id,
  GROUP_CONCAT(produk ORDER BY produk SEPARATOR ', ') AS daftar_produk
FROM detail_order
GROUP BY order_id;

Satu hal yang wajib kamu tau: GROUP_CONCAT punya batas panjang hasil. Default-nya cuma 1024 karakter, dan kalau hasilnya lebih panjang, teksnya kepotong diam-diam tanpa error. Naikin batasnya lewat setting session.

SET SESSION group_concat_max_len = 100000;

STRING_AGG vs GROUP_CONCAT: bandingannya

AspekSTRING_AGGGROUP_CONCAT
DatabasePostgreSQL, SQL ServerMySQL, SQLite
PemisahArgumen keduaKata kunci SEPARATOR
Pemisah defaultWajib diisiKoma tanpa spasi
Batas panjangNggak ada batas ketat1024 karakter (bisa dinaikin)

Konsepnya sama, tinggal sesuaikan dengan database yang kamu pakai. Kalau kamu sering butuh agregasi lain di query yang sama, baca conditional aggregation dengan CASE buat kombinasiin ringkasan angka dan teks.

Contoh kasus: daftar produk per order toko_berkah

Aku pakai data toko_berkah, tabel detail_order dengan 6.500 baris dari 1.800 order selama satu bulan. Tiap baris satu produk. Aku mau ringkas jadi satu baris per order plus daftar produknya.

SELECT
  order_id,
  COUNT(*) AS jumlah_item,
  STRING_AGG(produk, ', ' ORDER BY produk) AS daftar_produk
FROM detail_order
GROUP BY order_id;

Dari hasilnya aku sekalian hitung rata-rata item per order. Ketemu angka 3,6 produk per order. Yang menarik, 22% order (sekitar 396 order) isinya cuma satu produk, biasanya rokok atau pulsa. Order satu item ini nyumbang volume transaksi besar tapi nilai kecil.

Dengan daftar produk yang udah digabung, aku gampang scan order mana yang sering muncul bareng, misalnya kopi sachet selalu barengan gula. Info ini berguna buat nyusun paket bundling.

Kesalahan umum pakai STRING_AGG dan GROUP_CONCAT

  • Lupa GROUP BY. Tanpa GROUP BY, semua baris kegabung jadi satu string raksasa.
  • Hasil GROUP_CONCAT kepotong. Batas 1024 karakter di MySQL bikin daftar panjang terpangkas tanpa peringatan.
  • Urutan nggak konsisten. Tanpa ORDER BY di dalam fungsi, urutan hasilnya bisa beda tiap kali query jalan.
  • Nyampur NULL. Nilai NULL dilewati, tapi kadang bikin pemisah dobel kalau kamu nggabungin kolom hasil concat manual.

FAQ

Pertanyaan yang sering muncul soal STRING_AGG dan GROUP_CONCAT.

Penutup

STRING_AGG dan GROUP_CONCAT bikin kamu ngeringkas banyak baris teks jadi satu kolom, langsung di database. Ingat tiga hal: keduanya butuh GROUP BY, pakai ORDER BY di dalam fungsi biar urutannya stabil, dan di MySQL naikin group_concat_max_len kalau daftarnya panjang.

Sekali kamu terbiasa, laporan yang butuh daftar per grup jadi gampang. Mau bandingin dengan cara Python? Baca pandas groupby agg. Detail lengkap ada di dokumentasi PostgreSQL aggregate functions. Mau latihan query agregasi? Kulik di NgulikSQL.

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