I am trying to get the child elements of a one to many table to be rolled up into a json field in the parent table. The query I am running is
select
,case when array_position(array_agg(im.image_type), null) = 1 then '[]' else json_agg(row_to_json(im.*)) end as images
from observations ob
left join images im on ob.id = im.observation_id
group by 1
The reason I have the case statement there is because some observations don't have images but the json_agg(row_to_json function returns [NULL] instead of [] which is what I really want.
Is there a more elegant way to do this?
I searched on the internet and somebody suggested coalesce but no matter what combination I tried I could not make it happen.
Thanks.