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

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() 函數範例

我們將使用範例資料庫中的 employeesdepartments 表格來示範 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() 函數來取得已排序數值集合中的第一個值。

這個教學對您有幫助嗎?