【问题标题】:column of type jsonb query by length of array in jsonb按jsonb中数组长度查询jsonb类型的列
【发布时间】:2021-05-07 00:26:16
【问题描述】:

我有一个 Postgres 表 account_summaries,其中有一列 names 类型为 jsonb,其中包含数组形式的数据,例如['test 1', 'test 2'] 默认为空数组[]

id | names
1  | []
2  | ['test 1', 'test 2']
3  | []

我可以做select json_agg(names) from account_summaries,例如,它给了我。

json_agg                                                                                                                             
---------------------------------------------
 [[], ["test 1", "test 2"], [], [], []]
(1 row)

现在,假设我想写一个这样的查询:

  1. 如果名称列是空数组,则不返回任何内容
  2. 如果名称列不是空数组,则返回列中的元素
  3. 最终结果是一个包含名称的一维数组

所以我会得到

json_agg                                                                                                                             
---------------------------------------------
 ['test 1', 'test 2']
(1 row)

我试过了

SELECT CASE WHEN cardinality(jsonb_agg(names))>0 THEN names ELSE NULL END from account_summaries;

但它不起作用。

我正在使用 Postgres 11.4

【问题讨论】:

    标签: arrays postgresql jsonb


    【解决方案1】:
    with t(x) as (values('["a","b"]'::jsonb),('[]'),('["c","d"]'))
    select jsonb_agg(j)
    from t, jsonb_array_elements(x) as j;
    
           jsonb_agg
    ----------------------
     ["a", "b", "c", "d"]
    

    demo

    【讨论】:

      猜你喜欢
      • 2019-07-02
      • 2022-01-22
      • 1970-01-01
      • 2019-03-20
      • 2021-01-29
      • 1970-01-01
      • 2022-01-11
      • 2018-05-31
      • 1970-01-01
      相关资源
      最近更新 更多