我在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/

10-08 23:26