Как получить json, который отличается от столбцов - PullRequest
1 голос
/ 12 февраля 2020

У меня есть таблица базы данных PostgreSQL, и ее содержимое выглядит следующим образом:

id | person_key | age | gender | email
1  | 1          | 25  | M      | test@mail.com
2  | 1          | 25  | M      | test_2@gmail.com
3  | 2          | 35  | F      | sample_2@gmail.com
4  | 1          | 25  | M      | test_3@gmail.com

Я ищу способ получить json вывод, как показано ниже:

person_key.   | json

    1         | {'age':25, 'gender':'M', 'email':['test@mail.com','test_2@gmail.com','test_3@gmail.com' ]} 
    2         | {'age':35, 'gender':'F', 'email':['sample_2@gmail.com' ]} 

1 Ответ

5 голосов
/ 12 февраля 2020

Вы можете использовать функции агрегирования и Postgres json:

select 
    person_key,
    json_build_object(
        'age', age,
        'gender', gender,
        'email', json_agg(email order by id)
    ) js
from mytable
group by person_key, age, gender
order by person_key

Демонстрация на DB Fiddle :

person_key | js                                                                                               
---------: | :------------------------------------------------------------------------------------------------
         1 | {"age" : 25, "gender" : "M", "email" : ["test@mail.com", "test_2@gmail.com", "test_3@gmail.com"]}
         2 | {"age" : 35, "gender" : "F", "email" : ["sample_2@gmail.com"]}                                   
...