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からGROUPBYまでの列を繰り返す必要はありません。 GROUPBYで生徒の名前を繰り返す必要はありません。主キーでGROUPBYするだけです。学生の主キーを削除する場合は、GROUPBYで学生名を繰り返す必要があります。

    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. MySQLデータベース内のすべてのテーブルを一覧表示する4つの方法

    2. SQLServerの日時フィールドのデフォルト値をタイムスタンプに追加します

    3. SQLiteデータベースのクローンを作成する

    4. PostgreSQLで英数字のみを含む行を返す2つの方法