Посчитать уникальный вложенный ключ / значения в JSON в Postgres? - PullRequest
0 голосов
/ 17 мая 2018

Как посчитать уникальный вложенный ключ / значения в json в postgres?

Каждая запись user имеет столбец json с именем hobby_years, который структурирован, как показано ниже, но отличается от пользователя к пользователю.

Пример 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 голосов
/ 17 мая 2018

Как то так?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...