PostgreSQL-在字符串上连接\u agg

PostgreSQL-在字符串上连接\u agg,postgresql,string-aggregation,Postgresql,String Aggregation,这个标题可能有误导性,因为我似乎找不到合适的。但它来了 我有三张桌子 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

这个标题可能有误导性,因为我似乎找不到合适的。但它来了

我有三张桌子

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\u 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);

你为什么不想按学生id分组呢?

很抱歉。忘了我还得到了上述表的其他列。我正在做一份报告,所述信息与实际情况不同,但结构仍然相同。工作正常。非常感谢,好先生。不过我还是不能投票。