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

PostgreSQL 10 ARRAY_AGG处理数组索引时仅返回首个值问题排查

问题原因分析
  • 数组索引规则错误:PostgreSQL的数组默认采用1-based索引(第一个元素下标为1),你定义的星期数组ARRAY['Mon','Tue','Wed','Thu','Fri','Sat','Sun']中,索引1对应周一,索引2对应周二,以此类推。你存储的day字段是0对应周一,直接用day作为数组下标时,day=0属于无效索引会返回null,day=2会取到索引2的周二值,这就是你遇到的索引偏移问题。
  • NULL值被自动过滤:ARRAY_TO_STRING方法拼接数组时会自动忽略所有NULL值,你示例中的两条记录day=0返回NULL、day=2返回'Tue',聚合后的数组为[NULL, 'Tue'],拼接后就只剩下'Tue',看起来就像只返回了首个值。
修复方案

仅需要将数组下标调整为day + 1,把0起始的day值转换为匹配PostgreSQL数组的1起始索引即可,修复后的代码如下:

SELECT ARRAY_TO_STRING(ARRAY_AGG((ARRAY['Mon','Tue','Wed','Thu','Fri','Sat','Sun'])[timetable_periods.day + 1]), '-')
FROM timetable_periods
WHERE courses.id = timetable_periods.course_id
GROUP BY timetable_periods.course_id

修复后示例中的day=0和2会对应到数组索引1和3,取到'Mon'和'Wed',最终拼接结果为Mon-Wed,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:06:01