본문 바로가기
  • BLG-ZYNGIROK-모토-꿈꾸며-배우고-나누며-이루다
ICT/SQL

SQL 문법 | 윈도우 함수 | LAG, LEAD

by dazwischen 2021. 10. 6. 21:23
반응형

다른 행의 값을 새로운 칼럼(열)로 불러오는 함수 LAG과 LEAD에 대해서 알아보자. LAG은 현재행(CURRENT ROW) 기준으로 위쪽 값들을 다루고 LEAD는 아래쪽 값들을 다룬다. 

LAG & LEAD

lag-lead-thumbnail-image
LAG AND LEAD

01 CURRENT ROW : 표현될 행을 현재 행이라고 한다

SQL에는 CURRNET ROW라는 개념이 있다. 우리말로 표현했을 대 현재행이라고 직역할 수 있는데 내용을 조금만 더 보충해 보자. SQL에서 말하는 CURRENT ROW는 자료를 읽는 순간의 행을 말한다. 따라서 SQL 엔진이 100번째 행을 읽고 있다면 이전 행은 99번째 행이 되고 101번째 행이 이후행이 된다.

02 LAG : 이전행을 가져온다

현재 행보다 이전행, 이전전행... 을 불러와서 비교하고 싶을 때 사용할 수 있는 함수가 LAG이다. 기본 쿼리문은 다음과 같이 작성한다.

SELECT	COL1, COL2, LAG(COL2, WNATED_ROW_NUMBER) OVER(ORDER BY COL1)
FROM	TABLE_NAME
;

LAG 함수 안에는 두가지 인자가 들어간다. COL2로 작성한 칼럼명과 WANTED_ROW_NUMBER라고 작성한 현재행으로부터 몇 번째 행을 불러올지를 선택하는 숫자 인자이다. 윈도우 함수의 특징은 작성한 다음에 항상 OVER안에 ORDER BY 절을 작성해 줘야 한다는 점이다.

EXAMPLE

월, SQLD 문의 건수, 이전 달 SQLD 문의건수를 순서대로 보여주세요.

SELECT	MONTH, MONTHLY_QNA, LAG(MONTHLY_QNA, 1) OVER (ORDER BY MONTH) AS LAST_MONTHLY_QNA
FROM	SQLD_QNA
;
MONTH MONTHLY_QNA LAST_MONTHLY_QNA
1 1,000 NULL
2 1,250 1,000
3 1,789 1,250

 

 

 

02 LEAD : 다음행을 가져온다

LAG의 반대 기능으로 LEAD라는 함수가 있다. 현재 행 기준으로 이후, 이후 후 등등을 불러와서 비교할 수 있다. 기본 쿼리문은 다음과 같이 작성한다.

SELECT	COL1, COL2, LEAD(COL2, WANTED_ROW_NUMBER) OVER (ORDER BY COL1) AS WANTED_NAME
FROM	TABLE_NAME
;

사용 방식은 LAG과 동일하다.

EXAMPLE

월, SQLP 문의 건수, 다음 달 문의 건수를 순서대로 보여주세요.

SELECT	MONTH, MONTHLY_QNA, LEAD(MONTHLY_QNA, 1) OVER (ORDER BY MONTH) AS NEXT_MONTHLY_QNA
FROM	SQLP_QNA
;
MONTH MONTHLY_QNA LAST_MONTHLY_QNA
1 1,000 1,250
2 1,250 1,789
3 1,789 NULL

 

 

 

SUMMARY

  • CURRENT ROW는 SQL 엔진 입장에서 읽고 있는 행을 의미한다.
  • LAG/ LEAD는 이전/ 이후 행 값을 불러 오는 윈도우 함수로써 OVER( ) 안에 ORDER BY 절을 항상 갖고 있어야 한다.
  • LAG과 LAED는 볼러 올 컬럼의 이름과 현재행과의 몇 번째 위치에 있는지 알려주는 숫자 두 가지 인자를 입력해 줘야 한다.

* 오타 및 잘못된 내용이 있다면 댓글로 알려주세요!

반응형

댓글