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

Arrays 按jsonb中数组长度查询jsonb类型的列,arrays,postgresql,jsonb,Arrays,Postgresql,Jsonb,我有一个Postgres表account\u summaries,其中有一列names,类型为jsonb,数据是数组形式的,例如['test 1','test 2'],默认情况下有空数组[] id | names 1 | [] 2 | ['test 1', 'test 2'] 3 | [] 例如,我可以从帐户摘要中选择json(名称),它会给我一个例子 json_agg

我有一个Postgres表
account\u summaries
,其中有一列
names
,类型为
jsonb
,数据是数组形式的,例如
['test 1','test 2']
,默认情况下有空数组
[]

id | names
1  | []
2  | ['test 1', 'test 2']
3  | []
例如,我可以从帐户摘要中选择json(名称),它会给我一个例子

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

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

  • 如果名称列是空数组,则不返回任何内容
  • 如果“名称”列不是空数组,则返回该列中的元素
  • 最终结果是一个具有名称的一维数组
  • 所以我反而会

    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"]