Как посчитать ключи объекта jsonb в Postgresql? - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь найти, какие из ключей jsonb являются самыми популярными в моей области data. Мне удалось получить имена всех ключей с помощью этого запроса:

select jsonb_object_keys(data) as key
from client 
group by key;

Когда я пытаюсь добавить счетчик, как обычно:

select jsonb_object_keys(data) as key, count(jsonb_object_keys(data))
from client 
group by key;

Я получаю эту ошибку:

ERROR: aggregate function calls cannot contain set-returning function calls

Есть ли способ подсчета различных ключей объекта jsonb?

Пример данных:

data
{"a": "xyz"}
{"b": "assa", "c": "134323"}
{"c": "123"}
{"c": "12324", "a": "xysaz"}

Желаемый вывод:

key count(key)
a   2
b   1  
c   3

1 Ответ

1 голос
/ 25 февраля 2020

jsonb_object_keys - это функция, возвращающая множество - в основном, таблица. Вы хотите сослаться на него в предложении FROM, поэтому я рекомендую:

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

На самом деле lateral необязательно. Тем не менее, я предпочитаю включать его, потому что в противном случае синтаксический анализ является неловким (почему c.data разрешается правильно?).

...