PostgreSQL Создание столбца JSON из существующих данных - PullRequest
0 голосов
/ 28 июня 2018

Данные приведены ниже:

+---+------------+------------
|id | change     | date       
+---+------------+------------
| 1 | name       | 2018-06-20
| 2 | address    | 2018-06-20
| 3 | email      | 2018-06-20
| 4 | email      | 2018-06-21
| 5 | address    | 2018-06-22
| 6 | address    | 2018-06-23

Я пытаюсь создать представление, которое суммирует вышеперечисленное в один столбец json с такими данными, как:

{"name":["2018-06-20"], "address":["2018-06-20","2018-06-22","2018-06-23"], "email":["2018-06-20","2018-06-21"]} 

Я пытался выяснить это с помощью функций array_aggr, array_to_json, json_agg, array_build_object, но я не могу понять, что это совершенно правильно.

Я надеюсь, что кто-то может помочь.

Приветствия

1 Ответ

0 голосов
/ 28 июня 2018

Вы должны использовать агрегаты jsonb дважды для двух уровней:

select jsonb_pretty(jsonb_object_agg(change, dates))
from (
    select change, jsonb_agg(date) as dates
    from my_table
    group by change
    ) s

     jsonb_pretty      
-----------------------
 {                    +
     "name": [        +
         "2018-06-20" +
     ],               +
     "email": [       +
         "2018-06-20",+
         "2018-06-21" +
     ],               +
     "address": [     +
         "2018-06-20",+
         "2018-06-22",+
         "2018-06-23" +
     ]                +
 }
(1 row) 

Обратите внимание, что jsonb_pretty() не требуется, используется только для хорошего вывода.

...