【问题标题】:json_agg Two columns in Postgresjson_agg Postgres 中的两列
【发布时间】:2017-09-13 04:50:01
【问题描述】:

我有一个表,其中包含两列,如下所示:

rev | level
-----------
B   | 1001
B   | 1002
B   | 1003
C   | 1004
C   | 1005
D   | 1006

我正在尝试返回如下所示的列:

{"B":["1001","1002","1003"], "C":["1002","1003"], "D":["1006"]}

我能得到的最好的结果就是使用这个查询:

SELECT d.rev,
       to_json(ARRAY(SELECT level
                     FROM details
                     WHERE rev = d.rev
                     GROUP BY level
                     ORDER BY level DESC
                    )) AS level
FROM details d
GROUP BY d.rev
ORDER BY d.rev DESC

这给了我以下行:

____________________________________
|  B    | ["1001","1002","1003"]   |
|  C    | ["1004","1005"]          |
|  D    | ["1006"]                 |
|__________________________________|

如何将这些列组合成一个 JSON 对象?

【问题讨论】:

  • select version()?

标签: arrays json postgresql aggregate-functions


【解决方案1】:

您可以在查询中使用json_agg()

select rev, json_agg(level) levels
from details
group by 1
order by 1;

 rev |       levels       
-----+--------------------
 B   | [1001, 1002, 1003]
 C   | [1004, 1005]
 D   | [1006]
(3 rows)

json_object_agg() 将结果聚合到单个json:

select json_object_agg(rev, levels order by rev)
from (
    select rev, json_agg(level) levels
    from details
    group by 1
    ) s;

                        json_object_agg                         
----------------------------------------------------------------
 { "B" : [1001, 1002, 1003], "C" : [1004, 1005], "D" : [1006] }
(1 row)     

【讨论】:

  • 谢谢。这就是我要找的东西!
猜你喜欢
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 2021-05-22
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
相关资源
最近更新 更多