sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgresql aggregerad array

Använd 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

Förresten, om du använder Postgres 9.1 behöver du inte upprepa kolumnerna på SELECT to GROUP BY, t.ex. du behöver inte upprepa elevnamnet på GROUP BY. Du kan bara GRUPPERA EFTER på primärnyckeln. Om du tar bort primärnyckeln på eleven måste du upprepa elevnamnet på 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');


  1. Unik begränsning med villkor i MYSQL

  2. Undantag i huvudtråden java.sql.SQLEUndantag:Åtkomst nekad för användare ''@'localhost' (med lösenord:NO)

  3. DevOps:DBA eller utvecklare – Få balansen rätt

  4. Hur kopierar jag SQL Azure-databas till min lokala utvecklingsserver?