我有一个包含 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。
我该怎么做?
假设您的 JSON 数据具有常规架构,您可以将其转换为array(row(char_stars bigint, char_a1_lvl bigint))
,并将filter
与 lambda 表达式一起使用以选择与所需条件匹配的元素。
例如:
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;