sql >> Base de Datos >  >> RDS >> PostgreSQL

Matriz agregada de Postgresql

Utilice 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

Por cierto, si está utilizando Postgres 9.1, no necesita repetir las columnas en SELECCIONAR para AGRUPAR POR, p. no necesita repetir el nombre del estudiante en GROUP BY. Simplemente puede AGRUPAR POR en la clave principal. Si elimina la clave principal del estudiante, debe repetir el nombre del estudiante en 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');