概要: このチュートリアルでは、SQLのFIRST_VALUE()
関数を使用して、順序付けられた値の集合から最初の値を返す方法を学習します。
FIRST_VALUE()関数の概要
FIRST_VALUE()
は、順序付けられた値の集合から最初の値を返すウィンドウ関数です。
FIRST_VALUE()
関数の構文を以下に示します。
FIRST_VALUE(expression) OVER (
partition_clause
order_clause
frame_clause
)
Code language: SQL (Structured Query Language) (sql)
この構文において
expression
パーティションまたは結果セットの最初の行からのexpression
の戻り値です。
OVER
句は、partition_clause
、order_clause
、frame_clause
の3つの句で構成されています。
partition_clause
partition_clause
句は、以下の構文を持ちます。
PARTITION BY expr1, expr2, ...
Code language: SQL (Structured Query Language) (sql)
PARTITION BY
句は、結果セットの行を、FIRST_VALUE()
関数が適用されるパーティションに分割します。PARTITION BY
句を省略すると、関数は結果セット全体を単一のパーティションとして扱います。
order_clause
order_clause
句は、FIRST_VALUE()
関数が適用されるパーティション内の行をソートします。ORDER BY
句は、以下の構文を持ちます。
ORDER BY expr1 [ASC | DESC], expr2, ...
Code language: SQL (Structured Query Language) (sql)
frame_clause
frame_clause
は、現在のパーティションのサブセット(またはフレーム)を定義します。フレーム句の詳細については、ウィンドウ関数のチュートリアルを参照してください。
SQL FIRST_VALUE()関数の例
サンプルデータベースのemployees
テーブルとdepartments
テーブルを使用して、FIRST_VALUE()
関数の使用方法を示します。

A) 結果セットに対するSQL FIRST_VALUE()関数の使用例
次のステートメントは、会社で最も給与が低い従業員を見つけます。
SELECT
first_name,
last_name,
salary,
FIRST_VALUE (first_name) OVER (
ORDER BY salary
) lowest_salary
FROM
employees e;
Code language: SQL (Structured Query Language) (sql)
部分的な出力は次のとおりです。

この例では、ORDER BY
句によって従業員を給与でソートし、FIRST_VALUE()
によって最も給与が低い従業員の氏名が選択されます。
B) パーティションに対するSQL FIRST_VALUE()の使用例
次のステートメントは、各部署で最も給与が低い従業員を返します。
SELECT
first_name,
last_name,
department_name,
salary,
FIRST_VALUE (CONCAT(first_name,' ',last_name)) OVER (
PARTITION BY department_name
ORDER BY salary
) lowest_salary
FROM
employees e
INNER JOIN departments d
ON d.department_id = e.department_id;
Code language: SQL (Structured Query Language) (sql)
出力は次のとおりです。

この例では、
- まず、
PARTITION BY
句によって従業員が部署ごとに分割されます。 - 次に、
ORDER BY
句によって、各部署の従業員が給与の低い順にソートされます。 - 最後に、
FIRST_VALUE()
が各パーティション内のソートされた行に適用されます。これにより、部署ごとに最も給与が低い従業員が選択されます。
このチュートリアルでは、SQLのFIRST_VALUE()
関数を使用して、順序付けられた値の集合から最初の値を取得する方法を学習しました。