2016-12-05 71 views
0

我有一個PostgreSQL表看起來像這樣:構建JSON對象通過/總和

ID CURRENCY PRICE 
1 EUR   100 
2 EUR   650 
3 USD   90 

我想這樣做,返回格式化這樣的JSON對象的查詢: {「EUR」 :750,「USD」:90}

該值是每行與相同貨幣的總和。

我試着用json_object_agg做到這一點:

SELECT 
    json_object_agg(currency, SUM(amount)) AS balance 
FROM business_balances GROUP BY currency; 

,但我有一個SQL錯誤:

ERROR: aggregate function calls cannot be nested

任何想法,我該怎麼辦呢? :)

+0

它說,你不能'json_object_agg(SUM())' –

+1

你的例子是不連貫的。您的表格有'PRICE'一欄,而您的查詢總計'金額'和100 EUR + 650 EUR!= 760 EUR。 –

+0

@RobinKoch是的,我的壞x) –

回答

1

水木清華等應工作:

with p as (
    SELECT distinct currency, SUM(amount) over (partition by currency) AS balance 
    FROM business_balances 
) 
SELECT 
    json_object_agg(currency, balance) 
FROM business_balances GROUP BY currency; 
+0

是啊,很像我正在尋找!謝謝 :) –

1

做的第一聚合(總和)在子查詢:

SELECT json_object_agg(currency, sum) AS balance 
FROM (SELECT currency, sum(amount) 
     FROM business_balances GROUP BY currency 
    ) as sums;