Могу ли я использовать json_array_length с условным условием? - PullRequest
1 голос
/ 11 июня 2019

У меня есть поле с JSON, которое я запрашиваю:

Пример точки данных поля json_data выглядит так:

apples=
[{"CHAR_STARS":1,"CHAR_A1_LVL":1},
{"CHAR_STARS":1,"CHAR_A1_LVL":2}]

Я могу получить количество яблок с помощью json_array_length(json_data['apples']) который возвращает 2 в этом случае

Что я хотел бы посчитать только с CHAR_A1_LVL> 1?В этом случае это вернет 1.

Как я могу это сделать?

1 Ответ

2 голосов
/ 13 июня 2019

Предполагая, что ваши данные JSON имеют регулярную схему, вы можете преобразовать их в array(row(char_stars bigint, char_a1_lvl bigint)) и использовать filter с лямбда-выражением , чтобы выбрать элементы, которые соответствуют требуемомуусловие.

Например:

WITH data(x) AS (
    VALUES '[{"CHAR_STARS":1,"CHAR_A1_LVL":1}, {"CHAR_STARS":1,"CHAR_A1_LVL":2}]'
)
SELECT cardinality(
    filter(
        cast(json_parse(x) as array(row(char_stars bigint, char_a1_lvl bigint))),
        r -> r.char_a1_lvl > 1))
FROM data;
...