如何获得与列不同的json

JDe*_*Dev 1 sql database arrays postgresql json

我有一个 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
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种获取 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' ]} 
Run Code Online (Sandbox Code Playgroud)

GMB*_*GMB 5

您可以使用聚合和 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
Run Code Online (Sandbox Code Playgroud)

DB Fiddle 上的演示

person_key | js                                                                                               
---------: | :------------------------------------------------- -----------------------------------------------
         1 | {“年龄”:25,“性别”:“M”,“电子邮件”:[“test@mail.com”,“test_2@gmail.com”,“test_3@gmail.com”]}
         2 | {“年龄”:35,“性别”:“F”,“电子邮件”:[“sample_2@gmail.com”]}