Агрегировать уникальные значения jsonb в одном поле в postgres - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть такой набор данных:

     id     |                       recipients_by_data                       
------------+------------------------------------------------------------
 1000000001 | {"name": "users", "phone": "users"}
 1000000002 | {"address": "users", "phone": "administrators"}
 1000000003 | {"birthdate": "managers"}
 1000000004 | {"name": "citizens", "phone": "citizens", "gender": "none"}
...

, где получатели имеют тип jsonb.

Я хочу объединить все значения получателей в поле следующим образом:

     id     |                       data_recipients                       
------------+--------------------------------------------------------
 1000000001 | users
 1000000002 | users, administrators
 1000000003 | managers
 1000000004 | citizens, none

Как мне этого добиться?

1 Ответ

0 голосов
/ 04 апреля 2019

Не уверен, что это оптимально, но это работает:

WITH agg_recipients AS (
  SELECT id, string_agg(value, ', ') FROM (
    SELECT id, value
    FROM applications, jsonb_each_text(recipients_by_data)
    GROUP BY jsonb_each_text.value, id
  ) a
  GROUP BY id
)
UPDATE applications
SET data_recipients = agg_recipients.string_agg
FROM agg_recipients
WHERE applications.id = agg_recipients.id;
...