SQL FIRST_VALUE

概要: このチュートリアルでは、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_clauseorder_clauseframe_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()関数の使用方法を示します。

Employees & Departments Tables

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)

部分的な出力は次のとおりです。

SQL FIRST_VALUE function over result set example

この例では、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)

出力は次のとおりです。

SQL FIRST_VALUE function over partition example

この例では、

  • まず、PARTITION BY句によって従業員が部署ごとに分割されます。
  • 次に、ORDER BY句によって、各部署の従業員が給与の低い順にソートされます。
  • 最後に、FIRST_VALUE()が各パーティション内のソートされた行に適用されます。これにより、部署ごとに最も給与が低い従業員が選択されます。

このチュートリアルでは、SQLのFIRST_VALUE()関数を使用して、順序付けられた値の集合から最初の値を取得する方法を学習しました。

このチュートリアルは役に立ちましたか?