同一查询使用两个LISTAGG返回多行,如何获取单行聚合结果?
解决方法:将同一ID的字段值拼接为单行结果
你的SQL返回多行的核心问题是GROUP BY子句错误:你按rank, title分组,而每条数据的rank和title组合都是唯一的,这会让每一行单独成为一个分组,LISTAGG函数实际上只拼接了单个值,自然返回多条结果。
修改后的SQL如下:
SELECT id, LISTAGG(rank, ', ') WITHIN GROUP(ORDER BY rank) AS concatenated_rank, LISTAGG(title, ', ') WITHIN GROUP(ORDER BY title) AS concatenated_title FROM test WHERE id = 1 GROUP BY id;
关键修改点:
- 把
GROUP BY rank, title改为GROUP BY id,这样所有id=1的数据会被合并到同一个分组中,LISTAGG才能正确拼接多个值 - 在SELECT中显式包含
id字段,确保结果行包含目标id - 给拼接后的字段起别名,让结果更清晰
- 原SQL中的
ORDER BY id可以保留,但因为已经通过WHERE限定了id=1,实际不影响结果
执行这个修改后的语句,就能得到你想要的单行结果:id为1,rank列值为VP, CIO, CFO,title列值为Business, Sales, Marketing。
内容的提问来源于stack exchange,提问作者bestie techhy
相关产品推荐
相关产品推荐

