Postgres:计算 jsonb 中特定键的行数
Postgres: count rows in jsonb for a specific key
我有一个带有两个标签的 table:id INT
和 value JSONB
。在 value
中,我有一个 json 对象 props
,其中包含键 id_1
、id_2
等,以及它们各自的值。
有没有办法统计JSON对象props
有特定键的行,比如id_1
?
在此示例中,应该有两个结果:第 1 行和第 4 行。
id | value
1 | {"name": "Jhon", "props": {"id_1": {"role": "role1", "class": "class1"}, "id_2": {"role": "role2", "class": "class2"}}}
2 | {"name": "Frank", "role": ["role1", "role2"]}
3 | {"name": "Bob", "props": {"id_3": {"role": "role3", "class": "class3"}, "id_4": {"role": "role4"}}}
4 | {"name": "Carl", "props": {"id_5": {"role": "role5", "class": "class5"}, "id_1": {"class": "class6"}}}
我试过类似的方法,但要使其正常工作,我还必须指定值,但每一行的值都可能发生变化。例如,对于这个查询,我只返回一行。
SELECT count(value)
FROM "myTable"
where value->'props' ->> 'id_1' = '{"role": "role1", "class": "class1"}'
试试这个-
SELECT COUNT(z.*) FROM (
SELECT id, value->'props'->>'id_1' as val FROM "myTable" ) z WHERE z.val
IS NOT NULL
使用 ?
operator 来测试键是否存在,而不考虑值。
SELECT count(*)
FROM "myTable"
where value -> 'props' ? 'id_1
我有一个带有两个标签的 table:id INT
和 value JSONB
。在 value
中,我有一个 json 对象 props
,其中包含键 id_1
、id_2
等,以及它们各自的值。
有没有办法统计JSON对象props
有特定键的行,比如id_1
?
在此示例中,应该有两个结果:第 1 行和第 4 行。
id | value
1 | {"name": "Jhon", "props": {"id_1": {"role": "role1", "class": "class1"}, "id_2": {"role": "role2", "class": "class2"}}}
2 | {"name": "Frank", "role": ["role1", "role2"]}
3 | {"name": "Bob", "props": {"id_3": {"role": "role3", "class": "class3"}, "id_4": {"role": "role4"}}}
4 | {"name": "Carl", "props": {"id_5": {"role": "role5", "class": "class5"}, "id_1": {"class": "class6"}}}
我试过类似的方法,但要使其正常工作,我还必须指定值,但每一行的值都可能发生变化。例如,对于这个查询,我只返回一行。
SELECT count(value)
FROM "myTable"
where value->'props' ->> 'id_1' = '{"role": "role1", "class": "class1"}'
试试这个-
SELECT COUNT(z.*) FROM (
SELECT id, value->'props'->>'id_1' as val FROM "myTable" ) z WHERE z.val
IS NOT NULL
使用 ?
operator 来测试键是否存在,而不考虑值。
SELECT count(*)
FROM "myTable"
where value -> 'props' ? 'id_1