如何在 Postgresql 中计算 jsonb 对象键?

Ale*_*sov 2 sql postgresql jsonb

我正在尝试查找哪些 jsonb 键是我所在领域中最受欢迎的键data。我能够通过以下查询获取所有键的名称:

select jsonb_object_keys(data) as key
from client 
group by key;
Run Code Online (Sandbox Code Playgroud)

当我尝试像平常一样添加计数时:

select jsonb_object_keys(data) as key, count(jsonb_object_keys(data))
from client 
group by key;
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

ERROR: aggregate function calls cannot contain set-returning function calls
Run Code Online (Sandbox Code Playgroud)

有没有办法计算 jsonb 对象的不同键?

样本数据:

data
{"a": "xyz"}
{"b": "assa", "c": "134323"}
{"c": "123"}
{"c": "12324", "a": "xysaz"}
Run Code Online (Sandbox Code Playgroud)

期望的输出:

key count(key)
a   2
b   1  
c   3
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

jsonb_object_keys是一个集合返回函数——基本上是一个表。您想在条款中引用它FROM,所以我建议:

select k as key, count(*)
from client c cross join lateral
     jsonb_object_keys(c.data) k
group by k;
Run Code Online (Sandbox Code Playgroud)

实际上是lateral可选的。但是,我更喜欢包含它,因为否则解析会很尴尬(为什么c.data解析正确?)。