在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