【发布时间】:2016-02-01 12:44:37
【问题描述】:
我正在使用 Postgres 9.4。我有一个带有 JSONB 字段的表:
Column │ Type │ Modifiers
─────────────────┼──────────────────────┼────────────────────────────────────────────────────────────────────
id │ integer │ not null default
practice_id │ character varying(6) │ not null
date │ date │ not null
pct_id │ character varying(3) │
astro_pu_items │ double precision │ not null
astro_pu_cost │ double precision │ not null
star_pu │ jsonb │
我想按日期检索各种属性的总和值,包括 JSONB 数组中的任何内容(可以安全地假设其深度为 1),并以与原始表中相同的结构返回值。
这是我现在使用的查询:
SELECT date,
SUM(total_list_size) AS total_list_size,
json_object_agg(key, val)
FROM (
SELECT date,
SUM(total_list_size) AS total_list_size,
key, SUM(value::numeric) val
FROM frontend_practicelist p, jsonb_each_text(star_pu)
GROUP BY date, key
) p
GROUP BY date
ORDER BY date;
它没有失败,JSON 以字典的形式呈现,这正是我想要的。但是,total_list_size 的总和看起来太大了。我认为它必须被总结两次。
如何在保持相同形状结果的同时获得 total_list_size 的正确总和值?
【问题讨论】:
-
更新:如果我在外部查询中用
AVG代替SUM,我会得到正确的结果,尽管我不确定这是最有效的处理方式。
标签: json postgresql postgresql-9.4 jsonb