๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ›‹๏ธ ๋ฐ์ดํ„ฐ ๋ถ„์„/๐Ÿ“‚ SQL

LAG, LEAD๋กœ ์ด์ „, ๋‹ค์Œํ–‰ ๊ฐ€์ ธ์˜ค๊ธฐ

by ์œ ์Šค :) 2024. 12. 14.
๋ฐ˜์‘ํ˜•

1. LAG

: ์ด์ „ ํ–‰์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. 

  • LAG(col_name) OVER(ORDER BY )
SELECT LAG(job) OVER(ORDER BY job, empno) AS JOB_PREV

 

job, empno ๊ธฐ์ค€ ์ •๋ ฌํ•˜์—ฌ ์ด์ „ ๊ฐ’์„ JOB_PREV ์—ด๋กœ ๊ฐ€์ ธ์˜ด. 

 

 

2. LEAD

: ๋‹ค์Œ ํ–‰์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

  • LEAD(col_name) OVER(ORDER BY )
SELECT LEAD(job) OVER(ORDER BY job, empono) AS JOB_NEXT

job, empno ๊ธฐ์ค€ ์ •๋ ฌํ•˜์—ฌ ๋‹ค์Œ ๊ฐ’์„ JOB_NEXT ์—ด๋กœ ๊ฐ€์ ธ์˜ด. 

 

3. ๊ณ ๊ธ‰ ์‚ฌ์šฉ

1) ๊ฐ€์ ธ์˜ฌ ํ–‰์˜ ์œ„์น˜ ์ง€์ •ํ•˜๊ธฐ

๋ฐ”๋กœ ์ด์ „, ๋‹ค์Œ ๊ฐ’์ด ์•„๋‹ˆ๋ผ nํ–‰ ๋’ค์— ์žˆ๋Š”, ์•ž์— ์žˆ๋Š” ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค .

  • LAG/LEAD(col_name,ํ–‰์˜ ์œ„์น˜) OVER(ORDER BY ) 
SELECT 
	LAG(sal,2) OVER(ORDER BY sal) AS sal_prev2
	LEAD(sal,2) OVER(ORDER BY sal) AS sal_next2

 

2) NULL์ธ ๊ฒฝ์šฐ ๋Œ€์ฒด ๊ฐ’ ์ง€์ •ํ•˜๊ธฐ

  • LAG/LEAD(col_name,ํ–‰์˜ ์œ„์น˜, default) OVER(ORDER BY ) 
SELECT
	LEAD(sal,4,0) OVER(ORDER BY sal) AS sal_next4

โ—๏ธ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ ์‹ค์ œ ๊ฐ’์ด NULL์ธ ๊ฒฝ์šฐ์—๋Š” ๋Œ€์ฒด๊ฐ’์ด ์•„๋‹Œ NULL๋กœ ํ‘œ์‹œ๋œ๋‹ค. 

 

3) ๊ทธ๋ฃน๋ณ„๋กœ ์ด์ „,๋‹ค์Œ ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ

SELECT
	LAG(sal) OVER(PARTITION BY job ORDER BY job,sal) as sal_prev

PARTITION BY๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๊ทธ๋ฃน ๋‚ด๋ถ€์—์„œ ์ด์ „, ๋‹ค์Œ ๊ฐ’์„ ์ฐพ๋Š”๋‹ค 

๋ฐ˜์‘ํ˜•