2015-10-16 94 views
2

标题可能会误导,因为我似乎无法找到它的权利。但是在这里。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子句中,但我不想那样做。先谢谢了。

回答

2

你可以用一个子查询做到这一点:

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

+0

对不起。忘了我也得到了上述表格的其他栏目。我正在做一个报告,信息陈述是不同的,但仍然是相同的结构。 –

+0

答复已更新。 – Patrick

+0

按预期工作。非常感谢,先生。尽管如此,我仍然无法赞成。 –