Вы можете использовать функции агрегирования и 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"]}