【问题标题】:Construct json object from query with group by / sum使用 group by / sum 从查询构造 json 对象
【发布时间】:2016-12-06 00:33:53
【问题描述】:

我有一个如下所示的 Postgresql 表:

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

我想做一个返回 JSON 对象的查询,格式如下: { “欧元”:750,“美元”:90 }

值是相同货币的每一行的总和。

我试着用 json_object_agg 来做:

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

但我有一个 sql 错误:

错误:聚合函数调用不能嵌套

知道我该怎么做吗? :)

【问题讨论】:

  • 它说你不能json_object_agg(sum())
  • 你的例子不连贯。您的表格包含 PRICE 列,而您的查询总和为 amount 和 100 EUR + 650 EUR != 760 EUR。
  • @RobinKoch 是的,我的坏 x)

标签: json postgresql


【解决方案1】:

Smth like 应该可以工作:

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;

【讨论】:

  • 是的,很像我要找的东西!谢谢:)
【解决方案2】:

在子查询中进行第一次聚合(求和):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    相关资源
    最近更新 更多