2017-04-17 46 views
0
兩列

我有具有以下表包含兩列如下所示:json_agg Postgres裏

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對象?

+0

'選擇版本()'? –

回答

3

您可以使用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)  
+0

謝謝。這就是我一直在尋找的! –