Postgres为每行做数组agg

时间:2019-02-11 12:05:09

标签: sql postgresql

我有一个查询,它将从我的医生表中获取Jobs_locum_hospital_ids,然后将其与id上的医院表连接并获取名称,然后将所有这些都放入数组中。

所以[187,123]-> ("George Eliot Hospital - Acute Services"),("Good Hope Hospital")

select array_agg(t)
        from (
        select h.name from (select jsonb_array_elements_text(d.jobs_locum_hospital_ids)::int as id  from doctor d
        where d.id = 11720) as q1
        left join hospital h on h.id = q1.id
                )t

但这仅针对where d.id = 11720执行 我想做的是对每一行执行此操作。因此,加入

select * from doctor
left join that thing above

1 个答案:

答案 0 :(得分:0)

很难弄清楚您的数据结构或为什么要为此使用json函数。据我所知,医生有一系列的医院ID,而您想要这些名称:

select d.*,
       (select array_agg(h.name)
        from unnest(d.jobs_locum_hospital_ids) dh join
             hospital h 
             on dh = h.id
       ) as hospital_names
from doctors;

您实际上想要执行此操作表明您确实想要一个连接表doctorHospitals,每位医生和每家医院一行。