この 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)