【问题标题】:PSQL: Count number of wildcard values in JSONB arrayPSQL:计算 JSONB 数组中通配符值的数量
【发布时间】:2016-06-15 13:38:56
【问题描述】:

我的表有一个 jsonb 列,它以这种格式存储 JSON 字符串数组:

["ItemA", "ItemB", "ItemC"]

我正在尝试根据数组中某些项目的数量过滤行,使用通配符作为项目名称的一部分。

根据我在 SO 上阅读的内容,我可以使用 jsonb_to_recordset 函数,然后正常查询数据,但我无法将各个部分放在一起。

如何使用 jsonb_to_recordset 来完成此任务?它要求一个列定义列表,但是我如何为一个字符串数组指定一个?

我假设的(但当然不是有效的)查询看起来像这样:

SELECT * FROM mytable, jsonb_to_recordset(mytable.jsonbdata) AS text[] WHERE mytable.jsonbdata LIKE 'Item%'

编辑: 也许可以使用类似的方法来完成:

SELECT * FROM mytable WHERE jsonbdata ? 'Item%';

【问题讨论】:

    标签: arrays json postgresql jsonb postgresql-9.5


    【解决方案1】:

    使用jsonb_array_elements():

    select *
    from 
        mytable t, 
        jsonb_array_elements_text(jsonbdata) arr(elem)
    where elem like 'Item%';
    
              jsonbdata          | elem  
    -----------------------------+-------
     ["ItemA", "ItemB", "ItemC"] | ItemA
     ["ItemA", "ItemB", "ItemC"] | ItemB
     ["ItemA", "ItemB", "ItemC"] | ItemC
    (3 rows)
    

    您可能只想选择不同的表行:

    select distinct t.*
    from 
        mytable t, 
        jsonb_array_elements_text(jsonbdata) arr(elem)
    where elem like 'Item%';
    

    【讨论】:

    • 谢谢!完成:获取我刚刚按我拥有的唯一列分组的计数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2019-07-13
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多