摘要:在本教程中,您将学习如何使用 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
。
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
定义当前分区的子集(或帧)。查看窗口函数教程了解更多 frame 子句信息。
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()
函数获取有序值集合中的第一个值。
本教程是否有用?