array_aggを使用します:http://www.sqlfiddle.com/#!1 / 5099e / 1
SELECT s.name, array_agg(g.Mark) as marks
FROM student s
LEFT JOIN Grade g ON g.Student_id = s.Id
GROUP BY s.Id
ちなみに、Postgres 9.1を使用している場合は、SELECTからGROUPBYまでの列を繰り返す必要はありません。 GROUPBYで生徒の名前を繰り返す必要はありません。主キーでGROUPBYするだけです。学生の主キーを削除する場合は、GROUPBYで学生名を繰り返す必要があります。
CREATE TABLE grade
(Student_id int, Mark varchar(2));
INSERT INTO grade
(Student_id, Mark)
VALUES
(1, 'A'),
(2, 'B'),
(2, 'B+'),
(3, 'C'),
(3, 'A');
CREATE TABLE student
(Id int primary key, Name varchar(5));
INSERT INTO student
(Id, Name)
VALUES
(1, 'John'),
(2, 'David'),
(3, 'Will');