在Postgres 10中,我遇到了将整数转换为工作日名称并通过ARRAY_AGG将所有记录值分组以形成字符串的问题。
以下子查询
只返回第一个值
在由timetable_preriods.day(整数)索引的数组中
SELECT ARRAY_TO_STRING(ARRAY_AGG((ARRAY['Mon','Tue','Wed','Thu','Fri','Sat','Sun'])[timetable_periods.day]), '-')
FROM timetable_periods
WHERE courses.id = timetable_periods.course_id
GROUP BY timetable_periods.course_id
而这显示了所有连接在字符串中的日子,正如预期的那样:
SELECT ARRAY_TO_STRING(ARRAY_AGG(timetable_periods.day), ', ')
FROM timetable_periods
WHERE courses.id = timetable_periods.course_id
GROUP BY timetable_periods.course_id
例如,一门课程有两个时间表周期,日期值分别为0和2(即周一和周三)
第一个查询只返回“Tue”,而不是“Mon,Wed”(因此既是索引问题,也只返回第一天)。
第二个查询按预期返回“0,2”
我在使用ARRAY(周名)时做错了什么吗?
谢谢
更新:上面的查询是子查询,课程表在主查询的FROM中