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.

Reply via email to