You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何按指定顺序使用string_agg聚合字段名称?

解决方案

要保持field_id中ID的顺序聚合字段名,需要在拆分ID时记录每个ID的原始位置,再按该位置排序后进行聚合。具体查询语句如下:

SELECT 
    l.id,
    l.field_id,
    string_agg(d.field_name, ',' ORDER BY pos) AS field_names
FROM labelprint l
JOIN LATERAL unnest(string_to_array(l.field_id::text, ',')) WITH ORDINALITY AS t(id_str, pos) ON true
JOIN datafields d ON d.id = t.id_str::int
GROUP BY l.id, l.field_id
ORDER BY l.id;

关键步骤说明:

  • unnest(...) WITH ORDINALITY:将逗号分隔的field_id拆分为行的同时,生成每个元素的原始位置序号pos,这是保留顺序的核心。
  • LATERAL连接:让拆分操作针对labelprint的每一行独立执行,确保每个行的ID拆分和位置对应正确。
  • string_agg(..., ORDER BY pos):聚合字段名时,指定按原始位置序号排序,这样就能严格遵循field_id中的ID顺序。

用你的示例数据测试,该查询会输出预期结果:

id | field_id | field_names
----+----------+-------------
  1 | 2,1      | Name,Age

内容的提问来源于stack exchange,提问作者Shantilal Suthar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 18:01:18