json - 在 PostgreSQL 中的 Json 行中总结一个值

标签 json postgresql aggregate-functions

假设我在 PostgreSQL 中有一个表,它有两列,Id 和 Doc。 在 Doc 列中有一个 Json 对象,如下所示:

{"eid":{"a":5, "b":6, "c":9}, "time":12345}
{"eid":{"b":6, "c":9, "x":25}, "time":13255}

如果能帮助我编写一个根据指定时间汇总“a”eid 的查询,我将不胜感激。 谢谢

最佳答案

我不确定你所说的“根据指定时间”是什么意思,但我想你想要:

SELECT * FROM j;
┌───────────────────────────────────────────────────┐
│                        doc                        │
├───────────────────────────────────────────────────┤
│ {"eid": {"a": 5, "b": 6, "c": 9}, "time": 12345}  │
│ {"eid": {"b": 6, "c": 9, "x": 25}, "time": 13255} │
└───────────────────────────────────────────────────┘
(2 rows)

SELECT SUM((doc#>>'{eid,a}')::integer) 
FROM j 
WHERE (doc->>'time')::integer = 12345;
┌─────┐
│ sum │
├─────┤
│   5 │
└─────┘
(1 row)

编辑

一次获取所有 key (您可能需要根据您的架构将 jsonb_* 更改为 json_*):

SELECT key, SUM(jsonb_extract_path_text(doc, 'eid', key)::integer)
FROM j, jsonb_object_keys(doc->'eid') sub(key)
GROUP BY key
;
┌─────┬─────┐
│ key │ sum │
├─────┼─────┤
│ x   │  25 │
│ b   │  12 │
│ a   │   5 │
│ c   │  18 │
└─────┴─────┘
(4 rows)

关于json - 在 PostgreSQL 中的 Json 行中总结一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31366408/

相关文章:

lua - 指导我为 Aerospike 编写聚合(groupBy、orderBy)Lua 脚本

javascript - Javascript 中的 Json 索引数组

mysql - 选择 GROUP BY 子句中指定的列以外的列

ruby-on-rails - 无法安装 json - Ubuntu 14.04 - Rails

Postgresql:有条件的唯一约束

java - 如何将 spring 中的@Lob 数据保存到 Postgres 数据库中?

Postgresql 损坏的 pg_catalog 表

hadoop - Elasticsearch:数周的聚合 min_doc_count 不起作用

json - Spectron 测试产生 JScript 语法错误

javascript - importJSON 在我不在的时候从服务器返回错误代码 429(限速)