Tengo una tabla que tiene lo siguiente contiene dos columnas que se parecen a las siguientes:
rev | level ----------- B | 1001 B | 1002 B | 1003 C | 1004 C | 1005 D | 1006Estoy tratando de devolver una columna que se ve así:
{"B":["1001","1002","1003"], "C":["1002","1003"], "D":["1006"]}lo mejor que pude obtener fue usar esta consulta:
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 DESCEsto me da las siguientes filas:
____________________________________ | B | ["1001","1002","1003"] | | C | ["1004","1005"] | | D | ["1006"] | |__________________________________|¿Cómo combino estas columnas en un objeto JSON?
Puede usar json_agg() en su consulta:
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) y json_object_agg() para agregar el resultado a un solo 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)