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

ペアワイズ配列合計集計関数?

    一般的なソリューション 任意の数の要素を持つ任意の数の配列に対して。個々の要素または配列全体をNULLにすることもできます:

    WITH ORDINALITYを使用した9.4以降のシンプル

    SELECT ARRAY (
       SELECT sum(elem)
       FROM  tbl t
           , unnest(t.arr) WITH ORDINALITY x(elem, rn)
       GROUP BY rn
       ORDER BY rn
       );
    

    参照:

    Postgres 9.3+

    これは、暗黙の LATERAL JOINを利用します。

    SELECT ARRAY (
       SELECT sum(arr[rn])
       FROM   tbl t
            , generate_subscripts(t.arr, 1) AS rn
       GROUP  BY rn
       ORDER  BY rn
       );
    

    参照:

    Postgres 9.1

    SELECT ARRAY (
       SELECT sum(arr[rn])
       FROM  (
          SELECT arr, generate_subscripts(arr, 1) AS rn
          FROM   tbl t
          ) sub
       GROUP  BY rn
       ORDER  BY rn
       );
    

    同じことがそれ以降のバージョンでも機能しますが、 SELECTのset-returning関数 リスト 標準のSQLではなく、一部の人に嫌われていました。ただし、Postgres10以降は問題ないはずです。参照:

    db <> fiddle こちら
    古い sqlfiddle

    関連:



    1. 小文字でのMySQL自動変換

    2. 2つのテーブルをHibernateで結合し、すべてのレコードをフェッチしますか?

    3. phpでutf-8データを取得し、excelsheet dbダンプに正しいエンコーディングを表示する方法は?

    4. ROracleを使用してRでストアドオラクルプロシージャを実行する