すべてのプロダクト
Search
ドキュメントセンター

:ウィンドウ関数

最終更新日:Nov 10, 2025

この Topic では、AnalyticDB for PostgreSQL V7.0 でサポートされている GROUPS ウィンドウフレームオプションとフレーム除外句について説明します。

背景情報

ウィンドウ関数は、各入力行に対して結果値を生成します。この値は、現在のウィンドウ内のレコードに基づいて計算されます。

GROUPS ウィンドウフレームオプション

GROUPS ウィンドウフレームオプションを使用すると、グループごとにウィンドウを選択できます。このオプションは、RANGE や ROWS よりも柔軟です。たとえば、現在の行を含むグループ、前のグループ、および次のグループの 3 つのグループをウィンドウとして選択できます。

フレームの除外句

次の句を使用して、現在の行またはグループをウィンドウフレームから除外できます: EXCLUDE CURRENT ROW、EXCLUDE GROUP、EXCLUDE TIES、および EXCLUDE NO OTHERS。EXCLUDE CURRENT ROW は現在の行を除外します。EXCLUDE GROUP は現在のグループ内のすべての行を除外します。EXCLUDE TIES は現在の行以外の現在のグループ内の行を除外します。EXCLUDE NO OTHERS は現在の行またはそのピアを除外しません。

構文

ウィンドウ関数の構文については、「ウィンドウ関数呼び出し」をご参照ください。

ウィンドウ関数でクエリテストを実行するためのデータを含むテストテーブルを作成します。
create table test(a int, b int,c int);
テストテーブルには、次のデータが含まれています:
 a  | b | c | 
----+---+---+
  1 | 0 | 0 |
  2 | 0 | 1 |
  3 | 0 | 1 |
  4 | 0 | 2 |
  5 | 1 | 2 |
  6 | 1 | 3 |
  7 | 1 | 3 |
  8 | 1 | 4 |
  9 | 1 | 4 |
 10 | 2 | 5 |
----+---+---+
(10 rows)
  • 例 1: グループ化されたデータを列 c で並べ替え、前のグループから次のグループまでの列 b の合計を計算します。
    select a,b,c,sum(b) over (order by c groups between 1 PRECEDING and 1 FOLLOWING) from test order by c;
    次の情報が返されます:
     a  | b | c | sum
    ----+---+---+-----
      1 | 0 | 0 |   0
      2 | 0 | 1 |   1
      3 | 0 | 1 |   1
      4 | 0 | 2 |   3
      5 | 1 | 2 |   3
      6 | 1 | 3 |   5
      7 | 1 | 3 |   5
      8 | 1 | 4 |   6
      9 | 1 | 4 |   6
     10 | 2 | 5 |   4
    ----+---+---+----
    (10 rows)
  • 例 2: グループ化されたデータを列 c で並べ替え、前のグループと現在のグループ (現在の行を除く) の列 b の合計を計算します。
    select a,b,c,sum(b) over (order by c groups between 1 PRECEDING and CURRENT ROW EXCLUDE CURRENT ROW) from test order by c;
    次の情報が返されます:
     a  | b | c | sum
    ----+---+---+-----
      1 | 0 | 0 |
      2 | 0 | 1 |   0
      3 | 0 | 1 |   0
      4 | 0 | 2 |   1
      5 | 1 | 2 |   0
      6 | 1 | 3 |   2
      7 | 1 | 3 |   2
      8 | 1 | 4 |   3
      9 | 1 | 4 |   3
     10 | 2 | 5 |   2
    ----+---+---+-----
    (10 rows)
  • 例 3: グループ化されたデータを列 c で並べ替え、前のグループと次のグループの列 b の合計を計算します。
    select a,b,c,sum(b) over (order by c groups between 1 PRECEDING and 1 FOLLOWING EXCLUDE GROUP) from test order by c;
    次の情報が返されます:
     a  | b | c | sum
    ----+---+---+-----
      1 | 0 | 0 |   0
      2 | 0 | 1 |   1
      3 | 0 | 1 |   1
      4 | 0 | 2 |   2
      5 | 1 | 2 |   2
      6 | 1 | 3 |   3
      7 | 1 | 3 |   3
      8 | 1 | 4 |   4
      9 | 1 | 4 |   4
     10 | 2 | 5 |   2
    ----+---+---+-----
    (10 rows)
  • 例 4: グループ化されたデータを列 c で並べ替え、前のグループと現在の行の列 b の合計を計算します。
    select a,b,c,sum(b) over (order by c groups between 1 PRECEDING and CURRENT ROW EXCLUDE TIES) from test order by c;
    次の情報が返されます:
     a  | b | c | sum
    ----+---+---+-----
      1 | 0 | 0 |   0
      2 | 0 | 1 |   0
      3 | 0 | 1 |   0
      4 | 0 | 2 |   0
      5 | 1 | 2 |   1
      6 | 1 | 3 |   2
      7 | 1 | 3 |   2
      8 | 1 | 4 |   3
      9 | 1 | 4 |   3
     10 | 2 | 5 |   4
    ----+---+---+-----
    (10 rows)
  • 例 5: グループ化されたデータを列 c で並べ替え、前のグループの列 b の合計を計算します。
    select a,b,c,sum(b) over (order by c groups between 1 PRECEDING and 1 PRECEDING EXCLUDE NO OTHERS) from test order by c;
    次の情報が返されます:
     a  | b | c | sum
    ----+---+---+-----
      1 | 0 | 0 |
      2 | 0 | 1 |   0
      3 | 0 | 1 |   0
      4 | 0 | 2 |   0
      5 | 1 | 2 |   0
      6 | 1 | 3 |   1
      7 | 1 | 3 |   1
      8 | 1 | 4 |   2
      9 | 1 | 4 |   2
     10 | 2 | 5 |   2
    ----+---+---+-----
    (10 rows)