【问题标题】:PostgreSQL average of JSON DataJSON 数据的 PostgreSQL 平均值
【发布时间】:2020-05-18 13:52:01
【问题描述】:

我有一些这样的数据:

id      heart_rate
1       {0: 28, 1: 25, 2: 38, 3: 42}
2       {0: 30, 1: 28, 2: 43, 3: 58}
3       {0: 42, 1: 29, 2: 98, 3: 38}

我正在尝试返回一个具有平均值的对象,如下所示:

{0: 32, 1: 26, 2: 58, 3: 43}

我尝试使用脚本循环并分析,但由于数据量很大,循环通过此过程可能需要太长时间且不切实际。

【问题讨论】:

  • 您使用哪种语言/框架来访问数据?
  • @Aroniez NodeJS

标签: json postgresql average


【解决方案1】:

您需要提取所有值,将它们转换为数字,计算平均值,然后将其转换回 JSON 值:

select to_jsonb(r)
from (
  select avg((heart_rate ->> '0')::int) as "0", 
         avg((heart_rate ->> '1')::int) as "1", 
         avg((heart_rate ->> '2')::int) as "2", 
         avg((heart_rate ->> '3')::int) as "3"
  from the_table
) r;

如果您真的不知道键,但您知道 所有 都可以转换为数字,则可以执行以下操作:

select jsonb_object_agg(ky, average)
from (
  select r.ky, round(avg(r.val::int)) as average
  from the_table
    cross join jsonb_each(heart_rate) as r(ky, val)
  group by r.ky
) t;

Online example

【讨论】:

  • 有没有办法遍历对象的最大长度?真实数据高达1000多个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 2020-04-15
  • 2016-11-14
  • 2021-10-02
  • 2022-01-20
  • 2021-09-09
相关资源
最近更新 更多