PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Matriz agregada do Postgresql


Use 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 propósito, se você estiver usando o Postgres 9.1, não precisará repetir as colunas em SELECT para GROUP BY, por exemplo. você não precisa repetir o nome do aluno em GROUP BY. Você pode simplesmente GROUP BY na chave primária. Se você remover a chave primária do aluno, precisará repetir o nome do aluno em 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');