按 jsonb 中数组的长度查询 jsonb 类型的列

column of type jsonb query by length of array in jsonb

我有一个 Postgres table account_summaries,它有一个类型为 jsonb 的列 names,它有数组形式的数据,例如['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. 如果名称列是一个空数组,return什么都没有
  2. 如果名称列不是空数组,return列中的元素
  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

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