2016-12-05 38 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;