PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgresql агрегатен масив

Използвайте 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

Между другото, ако използвате Postgres 9.1, не е необходимо да повтаряте колоните от SELECT до GROUP BY, напр. не е необходимо да повтаряте името на ученика в GROUP BY. Можете просто да ГРУПИРАТЕ по първичен ключ. Ако премахнете първичния ключ на ученик, трябва да повторите името на ученика в 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи Setseed() в PostgreSQL

  2. Защо трябва да научите PostgreSQL?

  3. Може ли PostgreSQL да извърши свързване между две съхранени процедури на SQL Server?

  4. Коя е най-добрата PostgreSQL рамка за висока достъпност? PAF срещу repmgr срещу инфографика на Patroni

  5. Използване на текущото време в UTC като стойност по подразбиране в PostgreSQL