我在jsonb
中有一个列存储一个映射,比如{'a':1,'b':2,'c':3}
,其中每行的键数不同。
我想数一数——jsonb_object_keys可以检索密钥,但它在setof
有这样的东西吗?
(select count(jsonb_object_keys(obj) from XXX )
(这不能作为
ERROR: set-valued function called in context that cannot accept a set
工作)Postgres JSON Functions and Operators Document
json_object_keys(json)
jsonb_object_keys(jsonb)
setof text Returns set of keys in the outermost JSON object.
json_object_keys('{"f1":"abc","f2":{"f3":"a", "f4":"b"}}')
json_object_keys
------------------
f1
f2
交叉表不可行,因为键的数目可能很大。
最佳答案
您可以将键转换为数组,并使用数组长度来获取:
select array_length(array_agg(A.key), 1) from (
select json_object_keys('{"f1":"abc","f2":{"f3":"a", "f4":"b"}}') as key
) A;
如果需要为整个表获取此值,可以只按主键分组。
关于sql - 如何计算PostgreSQL中JSON的setof/键数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36171737/