PostgreSQL - 加入string_agg
问题描述:
标题可能会误导,因为我似乎无法找到它的权利。但是在这里。PostgreSQL - 加入string_agg
我有三张桌子。
Students
student_id | name
1 Rhon
Subjects
subject_id | subject_name | student_id
1 Physics 1
2 Math 1
Grades
grade_id | student_id | subject_id | grade
1 1 1 90
2 1 2 89
3 1 2 88
我想结果是这样的:
student_id | student_name | subject_name | grades
1 Rhon Physics 90
1 Rhon Math 88,89
我当前的查询是:
SELECT students.student_id, subjects.subject_id, string_agg(grades.grade, ',')
FROM students
JOIN subjects ON students.student_id = subjects.student_id
JOIN grades ON subjects.subject_id = grades.subject_id;
是不是有什么毛病我查询?我错过了什么吗?该错误说student_id
需要在GROUP BY子句中,但我不想那样做。先谢谢了。
答
你可以用一个子查询做到这一点:
SELECT s.student_id, s.student_name, j.subject_name, g.grades
FROM students s
JOIN subjects j
JOIN (
SELECT student_id, subject_id, string_agg(grade, ',') AS grades
FROM grades
GROUP BY student_id, subject_id) g USING (student_id, subject_id);
到底为什么你不想GROUP BY student_id
?
对不起。忘了我也得到了上述表格的其他栏目。我正在做一个报告,信息陈述是不同的,但仍然是相同的结构。 –
答复已更新。 – Patrick
按预期工作。非常感谢,先生。尽管如此,我仍然无法赞成。 –