json_agg & array_agg
Misalkan punya struktur data many to many seperti ini:
- table Post
 - table Tag
 - table tag_post
 
Kita bisa menggunakan query berikut
SELECT post.title, tag.name
FROM post
LEFT JOIN tag_post ON post.id = tag_post.post_id
LEFT JOIN tag ON tag_post.tag_id = tag.id;Hasilnya seperti berikut
| id | title | tag | 
|---|---|---|
| 1 | Title | tag 1 | 
| 1 | Title | tag 2 | 
| 2 | Title 2 | tag 3 | 
| 3 | Title 3 | NULL | 
Tapi bagaimana kalau kita ingin informasinya tidak berulang dan hasilnya tag tersebut cukup menjadi 1 field.
Kita bisa menggunakan json_agg dan array_agg
json_agg
select post.id, post.title, json_agg("tag"."name") as tag
from post
LEFT join  tag_post on tag_post.post_id = post.id
LEFT JOIN tag on tag_post.tag_id = tag.id
GROUP by post.id
hasilnya
| id | title | tag | 
|---|---|---|
| 1 | Title | ["tag1", "tag2"] | 
| 2 | Title 2 | ["tag3"] | 
| 3 | Title 3 | [null] | 
atau array_agg
select post.id, post.title, array_agg("tag"."name") as tag
from post
LEFT join  tag_post on tag_post.post_id = post.id
LEFT JOIN tag on tag_post.tag_id = tag.id
GROUP by post.id
hasilnya
| id | title | tag | 
|---|---|---|
| 1 | Title | {tag1, tag2} | 
| 2 | Title 2 | {tag3} | 
| 3 | Title 3 | {NULL} |