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 ob.id ,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.