このチュートリアルでは、PostgreSQL の FIRST_VALUE()、LAST_VALUE()、Nth_VALUE() 関数を使用して、グループの最初の値、最後の値、n 番目の値を取得します。

PostgreSQLのこれらの関数は、テーブルの最初の値、最後の値、n番目の値を返すウィンドウ関数として知られています。

FIRST_VALUE:PARTITION BY 句で適用されたフィールドに基づいて、各グループの最初の値を返します。PARTITION BY が指定されていない場合、関数はクエリ結果セットのすべての行を単一のグループとして扱います。

LAST_VALUE:PARTITION BY 句に適用されたフィールドに基づいて、各グループの最後の値を返します。

NTH_VALUE:PARTITION BY 句に適用されたフィールドに基づいて、各グループの n 番目の値を返します。

PostgreSQL の FIRST_VALUE()、LAST_VALUE()、Nth_VALUE()

描写に使用したテーブルBASKETを以下に示します。

PostgreSQL の FIRST_VALUE()、LAST_VALUE()、Nth_VALUE() 2


FIRST_VALUE() 関数の例:

PostgreSQL の FIRST_VALUE() 関数は、各グループの最初の値を返します。

Select *, FIRST_VALUE(price) OVER(ORDER BY price) from basket;

価格列に基づいて最初の値が選択され、列として表示されます。結果のテーブルは次のようになります。

出力:

PostgreSQL の FIRST_VALUE()、LAST_VALUE()、Nth_VALUE() 3

LAST_VALUE() 関数の例:

PostgreSQL の LAST_VALUE() 関数は、各グループの最後の値を返します。

Select *, LAST_VALUE(price) OVER(ORDER BY price) from basket;

価格列に基づいて、その最後の値が選択され、列として表示されます。結果のテーブルは次のようになります。

出力:

PostgreSQL の FIRST_VALUE()、LAST_VALUE()、Nth_VALUE() 5

NTH_VALUE() 関数の例:

PostgreSQL の NTH_VALUE() 関数は、N を入力として受け取り、各グループの n 番目の値を返します。

Select *, NTH_VALUE(price,4) OVER(ORDER BY price RANGE BETWEEN UNBOUNDED PRECEDING
 AND UNBOUNDED FOLLOWING) from basket;

価格列に基づいて、4番目の値、つまり60が選択され、列として表示されます。キーワード「RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING」は、n番目の値が列全体に表示されるようにするためのものです。

結果の表は次のようになります

出力:

PostgreSQL の FIRST_VALUE()、LAST_VALUE()、Nth_VALUE() 6

FIRST_VALUE()とpartition byの組み合わせPostgreSQLの場合:

PostgreSQLのpartition byと組み合わせたFIRST_VALUEは各グループの最初の値を返します。

select *, FIRST_VALUE (price)  OVER (
PARTITION BY item_group
ORDER BY
price
) from Basket;

結果の表

PostgreSQL の FIRST_VALUE()、LAST_VALUE()、Nth_VALUE() 7

LAST_VALUE()とpartition byの組み合わせPostgreSQLの場合:

PostgreSQLのpartition byとLAST_VALUE()は各グループの最後の値を返します。

select *, LAST_VALUE (price)  OVER (
PARTITION BY item_group
ORDER BY
price RANGE BETWEEN UNBOUNDED PRECEDING
 AND UNBOUNDED FOLLOWING
) from Basket;

出力:

PostgreSQL の FIRST_VALUE()、LAST_VALUE()、Nth_VALUE() 8

Nth_VALUE() と PostgreSQL の “partition by” の組み合わせ:

Nth_VALUE() は、partition by とともに各グループの n 番目の値を返します。NTH_VALUE() 関数は、列名と整数を引数として受け取ります。price は、各アイテム グループの 3 番目の値が見つかる列名です。

select *, nth_VALUE (price,3)  OVER (
PARTITION BY item_group
ORDER BY 
price RANGE BETWEEN UNBOUNDED PRECEDING
 AND UNBOUNDED FOLLOWING
) from Basket;

したがって、各グループの3番目の値を含む結果の表は次のようになります。

出力:

PostgreSQL の FIRST_VALUE()、LAST_VALUE()、Nth_VALUE() 9