SQL LEAD

摘要: 在本教學中,您將學習如何使用 SQL LEAD() 函數存取指定實體偏移量(在目前列之後)的列資料。

SQL LEAD() 函數概述

SQL LEAD() 是一個視窗函數,它允許存取指定實體偏移量的列,該列位於目前列之後。

例如,透過使用 LEAD() 函數,您可以從目前列存取下一列的資料,或者存取目前列之後的第二列,或者存取目前列之後的第三列,依此類推。

LEAD() 函數對於計算目前列的值與後續列的值之間的差異非常有用。

LEAD() 函數的語法如下

LEAD(return_value [,offset[, default ]]) OVER (
    PARTITION BY expr1, expr2,...
	ORDER BY expr1 [ASC | DESC], expr2,...
)
Code language: SQL (Structured Query Language) (sql)

 return_value

從目前列偏移之後的下一列的回傳值。

 offset

從目前列向前偏移以存取資料的列數。offset 必須是非負整數。如果您沒有指定 offset,則預設為 1。

 default

如果 offset 超出分割範圍,則函數會回傳 default。 如果您沒有指定 default,則會回傳 NULL

 PARTITION BY 子句

PARTITION BY 子句將結果集的列分成多個分割區,LEAD() 函數會套用到這些分割區。 如果您沒有指定 PARTITION BY 子句,則整個結果集會被視為單一分割區。

ORDER BY 子句

ORDER BY 子句會對 LEAD() 函數套用的每個分割區中的列進行排序。

SQL LEAD() 函數範例

我們將使用範例資料庫中的 employees 表格進行演示。

A) 在結果集上使用 SQL LEAD() 函數的範例

以下陳述式會針對公司中的每位員工回傳緊接在該員工之後被僱用的員工的僱用日期

SELECT 
	first_name,
	last_name, 
	hire_date, 
	LEAD(hire_date, 1) OVER (
		ORDER BY hire_date
	) AS next_hired
FROM 
	employees;
Code language: SQL (Structured Query Language) (sql)

以下顯示輸出結果

SQL LEAD function Over Result Set Example

在這個範例中,我們省略了 PARTITION BY 子句,因此,整個結果被視為單一分割區。 ORDER BY 子句會依僱用日期升序排列員工。 LEAD() 函數會套用到結果集中的每一列。

B) 在分割區上使用 SQL LEAD() 函數的範例

以下陳述式會針對每位員工提供同部門中緊接在該員工之後被僱用的員工的僱用日期

SELECT 
	first_name,
	last_name, 
	department_name,
	hire_date, 
	LEAD(hire_date, 1, 'N/A') OVER (
		PARTITION by department_name
		ORDER BY hire_date
	) AS next_hire_date
FROM 
	employees e
INNER JOIN departments d ON 
	d.department_id = e.department_id;
Code language: SQL (Structured Query Language) (sql)

以下圖片顯示部分輸出結果

SQL LEAD function Over Partition Example

在這個範例中,我們使用了 PARTITION BY 子句,依照部門將員工分成多個分割區,並使用 ORDER BY 子句,依照僱用日期升序排列每個部門中的員工。 LEAD() 函數會獨立套用到每個排序後的分割區,以取得每個部門中員工的下一個僱用日期。

在本教學中,您已經學習如何使用 SQL LEAD() 函數來存取從目前列開始的後續列的資料。

這個教學對您有幫助嗎?