JSONB字段中对象的Postgresql查询字典

Postgresql query dictionary of objects in JSONB field

我在 PostgreSQL 9.5 数据库中有一个 table,其 JSONB 字段包含以下形式的字典:

{'1': {'id': 1,
       'length': 24,
       'date_started': '2015-08-25'},
 '2': {'id': 2,
       'length': 27,
       'date_started': '2015-09-18'},
 '3': {'id': 3,
       'length': 27,
       'date_started': '2015-10-15'},
}

字典中的元素数量(“1”、“2”等)可能因行而异。

我希望能够使用单个 SQL 查询获得 length 的平均值。关于如何实现这一点有什么建议吗?

使用jsonb_each:

[local] #= SELECT json, AVG((v->>'length')::int)
           FROM j, jsonb_each(json) js(k, v)
           GROUP BY json;
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─────────────────────┐
│                                                                                           json                                                                                        │         avg         │
├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────┤
│ {"1": {"id": 1, "length": 240, "date_started": "2015-08-25"}, "2": {"id": 2, "length": 27, "date_started": "2015-09-18"}, "3": {"id": 3, "length": 27, "date_started": "2015-10-15"}} │ 98.0000000000000000 │
│ {"1": {"id": 1, "length": 24, "date_started": "2015-08-25"}, "2": {"id": 2, "length": 27, "date_started": "2015-09-18"}, "3": {"id": 3, "length": 27, "date_started": "2015-10-15"}}  │ 26.0000000000000000 │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────────────────┘
(2 rows)

Time: 0,596 ms