📅  最后修改于: 2023-12-03 15:18:38.477000             🧑  作者: Mango
在 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 BY
和 ORDER BY
子句对结果集进行分组和排序。如果您需要计算行的前一行而不是后一行的值,则可以使用 LAG
函数。