如何计算postgres中json中唯一的嵌套键/值?
每个user
记录都有一个名为hobby_years
的json列,结构如下,但用户与用户不同。
用户的hobby_years
值示例:
{
"soccer": {
"2006": 1,
"2007": 1
},
"skiing": {},
"basketball": {
"2006": 1,
"2016": 1,
"2017": 1,
"2018": 1
},
"painting": {
"2008": 1,
"2009": 1,
"2014": 1,
"2015": 1,
"2016": 1
}
}
我想知道一个或多个特定爱好存在多少年。即:足球和篮球 - 应该返回5
。
或者,如果能让这项活动更轻松,我可以选择如下结构数据
{
"soccer": [2006, 2007],
"skiing": [],
"basketball": [2006, 2016, 2017, 2018],
"painting": [2008, 2009, 2014, 2015, 2016]
}
这可能吗?
答案 0 :(得分:1)
这样的东西?
SELECT
name, -- or whatever field you want to use to identify the user
(SELECT COUNT(year)
FROM (
SELECT DISTINCT JSON_ARRAY_ELEMENTS(value)::TEXT AS year
FROM JSON_EACH(hobby_years)
WHERE key IN ('soccer', 'basketball')) years
) AS count
FROM users