在PostgreSQL上使用交叉连接将Json数组数据与多个字段分组

在PostgreSQL上使用交叉连接将Json数组数据与多个字段分组,json,postgresql,Json,Postgresql,这是jsonb字段数据: [ {'name': 'pratha', 'email': 'p@g.com', 'sub': { 'id': 1 } }, {'name': 'pratha', 'email': 'c@d.com', 'sub': { 'id': 2 } } ] 当我想获得姓名和电子邮件字段时,我会得到重复的字段 这是一个问题: SELECT jae.e->>'name', jae.e->>'email' FROM survey_r

这是
jsonb
字段数据:

[
   {'name': 'pratha', 'email': 'p@g.com', 'sub': { 'id': 1 } },
   {'name': 'pratha', 'email': 'c@d.com', 'sub': { 'id': 2 } }
]
当我想获得
姓名
电子邮件
字段时,我会得到重复的字段

这是一个问题:

SELECT jae.e->>'name', jae.e->>'email'
       FROM survey_results sr
            CROSS JOIN LATERAL jsonb_array_elements(sr.data_field) jae (e)
            GROUP BY jae.e->>'name', jae.e->>'email'
在此数据中,两个对象的名称都是pratha,但电子邮件不同。我想在数组中抓取一封
pratha
和最新的
email

可能吗

实际结果:

pratha    p@g.com
pratha    c@d.com
pratha    c@d.com
预期结果:

pratha    p@g.com
pratha    c@d.com
pratha    c@d.com
我只需要名称和电子邮件字段,因此,我想按名称对它们进行分组

请参见此处:

您尚未解释“最新电子邮件”的含义,但我认为您希望记录具有最高的
sub->id

您可以在上使用
DISTINCT来获得组中的最高值

SELECT DISTINCT ON (jae.e->>'name') --for every name
    jae.e->>'name'  as name, 
    jae.e->>'email' as email
       FROM survey_results sr
         CROSS JOIN LATERAL jsonb_array_elements(sr.data_field)  jae (e)
       ORDER BY jae.e->>'name', jae.e->'sub'->>'id' desc 
                                         --^ return only the row with the highest id