📜  PostgreSQL – LEAD函数(1)

📅  最后修改于: 2023-12-03 15:18:38.477000             🧑  作者: Mango

PostgreSQL – LEAD函数

在 PostgreSQL 中,LEAD 函数用于获取一个用于当前行的指定偏移量后的的行的值。

语法
LEAD(<expression>,<offset>,<default>) OVER (
  PARTITION BY <expression>
  ORDER BY <expression> [ASC | DESC]
)

参数说明:

  • <expression>:要计算的值。
  • <offset>:要获取的行的偏移量。默认为 1。
  • <default>:可选参数,当偏移量超出参考行数范围时,返回该值。

此外,函数还接受以下子句:

  • PARTITION BY:指定要对结果集分区的列。
  • ORDER BY:指定要用于排序的列。
示例

假设我们有如下 books 表:

id | title                 | author              | published_year
---+-----------------------+-----------------------+----------------
1  | The Great Gatsby  | F. Scott Fitzgerald  | 1925
2  | To Kill a Mockingbird | Harper Lee              | 1960
3  | 1984                     | George Orwell          | 1949
4  | Animal Farm          | George Orwell          | 1945
5  | The Da Vinci Code  | Dan Brown              | 2003

现在,我们可以使用以下查询来获取每本书的下一本书的标题和作者:

SELECT title, author, LEAD(title) OVER (
  ORDER BY id
) AS next_title, LEAD(author) OVER (
  ORDER BY id
) AS next_author
FROM books;

这将返回以下结果:

title                 | author              | next_title              | next_author
-----------------------+-----------------------+-----------------------+---------------------
The Great Gatsby  | F. Scott Fitzgerald  | To Kill a Mockingbird | Harper Lee
To Kill a Mockingbird | Harper Lee              | 1984                     | George Orwell
1984                     | George Orwell          | Animal Farm          | George Orwell
Animal Farm          | George Orwell          | The Da Vinci Code  | Dan Brown
The Da Vinci Code  | Dan Brown              | NULL                      | NULL

请注意,最后一本书(The Da Vinci Code)的下一本书列被设置为 NULL,因为它是表中的最后一行。

总结

LEAD 函数在 PostgreSQL 中用于获取给定行偏移量后的行的值。它可以使用 PARTITION BYORDER BY 子句对结果集进行分组和排序。如果您需要计算行的前一行而不是后一行的值,则可以使用 LAG 函数。