摘要:在本教程中,您將學習如何使用 SQL FIRST_VALUE() 函式返回有序值集中的第一個值。
SQL 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。
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() 函式

在結果集上使用 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)輸出
first_name | last_name | salary | lowest_salary
-------------+-------------+----------+---------------
Karen | Colmenares | 2500.00 | Karen
Guy | Himuro | 2600.00 | Karen
Irene | Mikkilineni | 2700.00 | Karen
Sigal | Tobias | 2800.00 | Karen
Shelli | Baida | 2900.00 | Karen
Alexander | Khoo | 3100.00 | Karen
...在此示例中,ORDER BY 子句按薪水對員工進行排序,而 FIRST_VALUE() 則選擇了薪水最低的員工的名字。
在分割槽上使用 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)輸出
first_name | last_name | department_name | salary | lowest_salary
-------------+-------------+------------------+----------+-------------------
William | Gietz | Accounting | 8300.00 | William Gietz
Shelley | Higgins | Accounting | 12000.00 | William Gietz
Jennifer | Whalen | Administration | 4400.00 | Jennifer Whalen
Lex | De Haan | Executive | 17000.00 | Lex De Haan
Neena | Kochhar | Executive | 17000.00 | Lex De Haan
Steven | King | Executive | 24000.00 | Lex De Haan
Luis | Popp | Finance | 6900.00 | Luis Popp
Ismael | Sciarra | Finance | 7700.00 | Luis Popp
Jose Manuel | Urman | Finance | 7800.00 | Luis Popp
John | Chen | Finance | 8200.00 | Luis Popp
Daniel | Faviet | Finance | 9000.00 | Luis Popp
Nancy | Greenberg | Finance | 12000.00 | Luis Popp
...在此示例中:
- 首先,
PARTITION BY子句按部門對員工進行劃分。 - 然後,
ORDER BY子句按薪水從低到高對每個部門的員工進行排序。 - 最後,將
FIRST_VALUE()應用於每個分割槽中已排序的行。它選出了每個部門中薪水最低的員工。
在本教程中,您學習瞭如何使用 SQL FIRST_VALUE() 函式獲取有序值集中的第一個值。
資料庫 #
- PostgreSQL FIRST_VALUE 函式
- Oracle FIRST_VALUE 函式
- SQL Server FIRST_VALUE 函式
- SQLite FIRST_VALUE 函式
- MySQL FIRST_VALUE 函式
本教程是否有幫助?