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

同じグループに属していないすべての値を集計する

    Postgres 11 以降、ウィンドウを使用します機能 カスタムフレームとframe_exclusion

    SELECT *, array_combine(values) OVER (ROWS BETWEEN UNBOUNDED PRECEDING
                                               AND UNBOUNDED FOLLOWING
                                               EXCLUDE CURRENT ROW) AS agg_values
    FROM   tbl;
    

    nameの場合 UNIQUEではありません 、そしてあなたが尋ねたので:

    SELECT *, array_combine(values) OVER (ORDER BY name
                                          ROWS BETWEEN UNBOUNDED PRECEDING
                                               AND UNBOUNDED FOLLOWING
                                               EXCLUDE GROUP) AS agg_values
    FROM   tbl;
    

    db <> fiddle こちら

    最初の行(も)は、現在の行を除いて、任意の行の順序で機能します。 2つ目は、ORDER BYが必要です 同じグループに含まれる行を確立します。

    マニュアル:

    大胆な強調鉱山。

    これは、カスタム集計関数array_combine(anyarray)を使用します a_horse提供
    またはここ:



    1. エイリアスをまとめて作成しますか?

    2. 数値をvarcharとして格納する

    3. Tsrange-2つの範囲の差を計算する

    4. PHPを使用してチェックボックスを使用してmysqlデータベースから複数の行を削除するにはどうすればよいですか?