sql >> データベース >  >> RDS >> PostgreSQL

Postgresqlを使用して、単一IDの配列値が行ごとに表示されます

    データをグループ化したいので、調べる場所は[集計関数リスト]( https://www.postgresql.org/docs/current/functions-aggregate.html )、この場合はstring_agg ( value text, delimiter text ) → text

    名前と部門のデータを連結し、例に示すように名前と部門を別々の行に配置する必要があります。そのためにE'\n' 区切り文字を使用する必要があります:

    SELECT
      id,
      string_agg(name, E'\n') as names,
      string_agg(dept, E'\n') as depts
    FROM 
      data
    GROUP BY
      id
    ORDER BY
      id;
    

    答えは、方法を示しています コメントはなぜそうしないのかを説明しています 。選択は今あなた次第です。

    編集1

    レコード数を保持し、グループの最初の行でIDを表示したい場合は、ウィンドウ関数を調べる必要があります。具体的には、 LAG

    SELECT
      CASE 
        WHEN id IS DISTINCT FROM LAG(id) OVER(order by id) THEN id 
        ELSE null 
      END as id,
      name,
      dept
    FROM 
      data
    order by
      data.id;
    

    SQLは、現在のIDを前の行のIDと比較し、それまたはnull値を出力します。




    1. Jbossデータソースでのデータベースフェイルオーバー

    2. Oracleで外部キーにインデックスを作成する必要がありますか?

    3. PHP / MySQLを使用して、ユーザーが1か月に3つの画像のみをアップロードするように制限する方法

    4. SQL:SQLクエリで順序を保存する方法は?