PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgresql-Aggregatarray

Verwenden Sie 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

Übrigens, wenn Sie Postgres 9.1 verwenden, müssen Sie die Spalten von SELECT bis GROUP BY nicht wiederholen, z. Sie müssen den Schülernamen bei GROUP BY nicht wiederholen. Sie können nur den Primärschlüssel GROUP BY verwenden. Wenn Sie den Primärschlüssel auf Schüler entfernen, müssen Sie den Schülernamen auf GROUP BY wiederholen.

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