分组到json数组

时间:2016-08-28 18:26:38

标签: sql postgresql

使用Postgres 9.5

对于每个app,我正在尝试计算从conversations列重要的各个网址开始的started_at_url

我能够得到像这样的结果

id: 1, ..., data: {"urls" : ["/","/insights","/signin"], "counts" : [1,2,2]}

但它宁愿有一个形式为{url, count}的JSON对象数组,而不是

到目前为止我的查询:

select
    dt.id as app_id,
    json_build_object(
        'urls', array_agg(dt.started_at_url),
        'counts', array_agg(dt.count)
    ) as data
from (
    select a.id, c.started_at_url, count(c.id) 
    from apps a
    left join conversations c on c.app_id = a.id
    where started_at_url is not null and c.started_at::date > (current_date - (7  || ' days')::interval)::date
    group by a.id, c.started_at_url
) as dt
group by dt.id

有什么建议吗?

由于

1 个答案:

答案 0 :(得分:1)

为什么不使用

array_agg(
   json_build_object(
      'url', dt.started_at_url,
      'count', dt.count
   )
)

而不是

json_build_object(
   'urls', array_agg(dt.started_at_url),
   'counts', array_agg(dt.count)
)