PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Matrice aggregata Postgresql

Usa 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

A proposito, se stai usando Postgres 9.1, non è necessario ripetere le colonne su SELECT per GROUP BY, ad es. non è necessario ripetere il nome dello studente su GROUP BY. Puoi semplicemente GROUP BY sulla chiave primaria. Se rimuovi la chiave primaria su studente, devi ripetere il nome dello studente su 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');