在PostgreSQL中,LEAD()函數用於以特定的物理偏移量訪問當前行之後的行。PostgreSQL LEAD()函數提供對以指定物理偏移量訪問當前行之後的行的訪問。這意味著從當前行開始,LEAD()函數可以訪問下一行,下一行之後的行等等的數據。 LEAD()函數對於將當前行的值與當前行之後的行的值進行比較非常有用。
下麵說明了LEAD()函數的語法:
用法:
LEAD(expression [, offset [, default_value]])
OVER (
[PARTITION BY partition_expression, ... ]
ORDER BY sort_expression [ASC | DESC], ...
)
讓我們分析以上語法:
- 這個表達根據與當前行的指定偏移量針對下一行進行評估。的表達可以是必須計算為單個值的列,表達式,子查詢。
- 偏移量是一個正整數,它指定從當前行轉發訪問的行數。偏移量可以是表達式,子查詢或列。偏移量默認為1。
- PARTITION BY子句將行劃分為應用了LEAD()函數的分區。默認情況下,如果省略PARTITION BY子句,則整個結果集是單個分區。
- 這個排序子句指定每個分區中行的排序順序LEAD()函數已應用。
範例1:
讓我們為演示建立一個新表,名稱為sales:
CREATE TABLE sales( year SMALLINT CHECK(year > 0), group_id INT NOT NULL, amount DECIMAL(10, 2) NOT NULL, PRIMARY KEY(year, group_id) );
現在向其中插入一些數據:
INSERT INTO sales(year, group_id, amount) VALUES (2018, 1, 1474), (2018, 2, 1787), (2018, 3, 1760), (2019, 1, 1915), (2019, 2, 1911), (2019, 3, 1118), (2020, 1, 1646), (2020, 2, 1975), (2020, 3, 1516);
以下查詢使用LEAD()函數返回當年和下一年的銷售額:
WITH cte AS (
SELECT
year,
SUM(amount) amount
FROM sales
GROUP BY year
ORDER BY year
)
SELECT
year,
amount,
LEAD(amount, 1) OVER (
ORDER BY year
) next_year_sales
FROM
cte;
輸出:
範例2:
以下語句使用LEAD()函數將每個產品組的當年銷售額與下一年的銷售額進行比較:
SELECT
year,
amount,
group_id,
LEAD(amount, 1) OVER (
PARTITION BY group_id
ORDER BY year
) next_year_sales
FROM
sales;
輸出:
相關用法
- PostgreSQL ARRAY_AGG()用法及代碼示例
- PostgreSQL AVG()用法及代碼示例
- PostgreSQL COUNT()用法及代碼示例
- PostgreSQL STRING_AGG()用法及代碼示例
- PostgreSQL MAX()用法及代碼示例
- PostgreSQL MIN()用法及代碼示例
- PostgreSQL SUM()用法及代碼示例
- PostgreSQL DENSE_RANK用法及代碼示例
- PostgreSQL NULLIF()用法及代碼示例
- PostgreSQL Drop用法及代碼示例
- PostgreSQL FIRST_VALUE用法及代碼示例
- PostgreSQL LAST_VALUE用法及代碼示例
- PostgreSQL NTILE用法及代碼示例
- PostgreSQL CUME_DIST用法及代碼示例
- PostgreSQL RANK用法及代碼示例
注:本文由純淨天空篩選整理自RajuKumar19大神的英文原創作品 PostgreSQL – LEAD Function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。