【问题标题】:Postgres: count rows in jsonb for a specific keyPostgres:计算 jsonb 中特定键的行数
【发布时间】:2021-09-27 13:04:14
【问题描述】:

我有一个带有两个标签的表:“id”(int)和“value”(jsonb)。在“值”列中,我有另一个带有键 id_1、id_2 等的 json 对象(“props”)及其对应的值。

有没有办法计算 json 对象“props”具有特定键的行?例如“id_1”? 在此示例中,结果应为 2(第 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"}}}

我尝试了类似的方法,但要使其正常工作,我也必须指定值,而不仅仅是键。并且每一行的值都可能改变。事实上结果是 1(错误,因为它必须是 2)

SELECT count(value)
FROM "myTable" 
where value->'props' ->> 'id_1' = '{"role": "role1", "class": "class1"}'

【问题讨论】:

    标签: json postgresql count jsonb


    【解决方案1】:

    试试这个-

    SELECT COUNT(z.*) FROM (    
    SELECT id, value->'props'->>'id_1' as val FROM "myTable" ) z WHERE z.val
    IS NOT NULL
    

    【讨论】:

    • 它计算所有行:(
    • 即使在添加 WHERE 子句之后?
    • @Brododipollo 添加 WHERE z.val IS NOT NULL 后会正常工作
    • 是的,它有效!非常感谢!
    猜你喜欢
    • 2018-01-04
    • 2019-07-13
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 2015-10-15
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多