按 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)
现在,假设我要编写这样的查询:
- 如果名称列是一个空数组,return什么都没有
- 如果名称列不是空数组,return列中的元素
- 最终结果是一个一维数组,名称为
所以我会得到
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"]
我有一个 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)
现在,假设我要编写这样的查询:
- 如果名称列是一个空数组,return什么都没有
- 如果名称列不是空数组,return列中的元素
- 最终结果是一个一维数组,名称为
所以我会得到
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"]