SQL FIRST_VALUE 函式

摘要:在本教程中,您將學習如何使用 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_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

在結果集上使用 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() 函式獲取有序值集中的第一個值。

資料庫 #

本教程是否有幫助?
© .