2015-06-04 64 views
4

我有一個簡單的查詢,SELECT name, grp FROM things;導致如下表所示:如何轉換查詢結果JSON對象內的Postgres

name | grp 
------+----- 
a | y 
b | x 
c | x 
d | z 
e | z 
f | z 

我想與以下單JSON對象落得:

{y: [a], x: [b,c], z: [d,e,f]} 

我覺得我更接近查詢SELECT grp, array_agg(name) as names FROM things GROUP BY grp;它給出了三行與「名稱」凝聚成一個數組,但我不知道從哪裏去從這裏得到行凝聚成一個單一的JSON對象。

SELECT json_build_object(grp, array_agg(name)) as objects FROM things GROUP BY grp;可能稍微接近一點,因爲這會導致個別JSON對象(如{y: [a]})的單列結果,但它們仍然是單個對象,因此可能不是正確的路徑。

這是使用Postgresql 9.4。

回答

4

看來這裏的關鍵是json_object_agg函數,它沒有與其餘的json函數一起列出。

參見:http://www.postgresql.org/docs/9.4/static/functions-aggregate.html

下面的查詢得到我正是我在尋找:

SELECT json_object_agg(each.grp, each.names) FROM (
    SELECT grp, array_agg(name) as names FROM things GROUP BY grp 
) AS each; 
+3

爲什麼總是我花了一天半的時間,試圖找出答案的情況下我自己,放棄,張貼到SO,給它更多的搜索,並在10分鐘內找到答案。 – Azdle

+2

在這裏積累的知識的浩瀚使你的思想感染。 – klin

相關問題