PostgreSQL聚合一个JSON列以获取任意行

kqhtkvqz  于 6个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(56)

我在psql中有一个查询,它返回json类型的列

SELECT PC.cid, json_object_agg(PC.pid, PC.map)
FROM process_table AS PC
WHERE PC.pid=240 OR PC.pid=63
GROUP BY PC.cid

字符串
正确返回:

cid |  json_object_agg
---------+--------------------
  625144 | { "63" : "gfff" }
  665087 | { "63" : "sdfg" }
  721472 | { "63" : "qerdd" }
  756135 | { "63" : "dasdfg" }
 2262581 | { "63" : "fgyhh" }


我想加入另一个表到这个表中,它具有多对多的关系。即cid不再是唯一的,并且会有重复的json_object_agg行。

SELECT F.cid, COUNT(SC.sid)
    FROM (
        SELECT PC.cid, json_object_agg(PC.pid, PC.map)
        FROM process_table AS PC
        WHERE PC.pid=240 OR PC.pid=63
        GROUP BY PC.cid
    ) AS F
INNER JOIN system_tables_2 as SC ON SC.cid=F.cid
GROUP BY F.cid

**如何为每个F.cid输出一个json_object_agg?因为它们都是相同的,所以不在乎哪个。

rqdpfwrv

rqdpfwrv1#

尝试在JSON对象上使用MAXMIN等聚合函数,如下所示

SELECT F.cid, MAX(F.json_object) AS json_object, COUNT(SC.sid)
    FROM (
        SELECT PC.cid, json_object_agg(PC.pid, PC.map) AS json_object
        FROM process_table AS PC
        WHERE PC.pid=240 OR PC.pid=63
        GROUP BY PC.cid
    ) AS F
    INNER JOIN system_tables_2 as SC ON SC.cid = F.cid
    GROUP BY F.cid;

字符串

相关问题