PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Tableau agrégé Postgresql

Utilisez 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

Au fait, si vous utilisez Postgres 9.1, vous n'avez pas besoin de répéter les colonnes de SELECT à GROUP BY, par ex. vous n'avez pas besoin de répéter le nom de l'étudiant sur GROUP BY. Vous pouvez simplement GROUP BY sur la clé primaire. Si vous supprimez la clé primaire sur étudiant, vous devez répéter le nom de l'étudiant sur GROUP BY.

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');