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 定义当前分区的子集(或帧)。查看窗口函数教程了解更多 frame 子句信息。

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() 函数获取有序值集合中的第一个值。

本教程是否有用?