在postgres中计算json中唯一的嵌套键/值?

时间:2018-05-17 15:59:31

标签: sql json postgresql

如何计算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]
}

这可能吗?

1 个答案:

答案 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