반응형
다른 행의 값을 새로운 칼럼(열)로 불러오는 함수 LAG과 LEAD에 대해서 알아보자. LAG은 현재행(CURRENT ROW) 기준으로 위쪽 값들을 다루고 LEAD는 아래쪽 값들을 다룬다.
LAG & 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는 볼러 올 컬럼의 이름과 현재행과의 몇 번째 위치에 있는지 알려주는 숫자 두 가지 인자를 입력해 줘야 한다.
* 오타 및 잘못된 내용이 있다면 댓글로 알려주세요!
반응형
'ICT > SQL' 카테고리의 다른 글
DB | DB 테이블과 사용자 접속 추가 제거 (0) | 2022.01.13 |
---|---|
SQL 문법 | NULL 값 먼저 또는 마지막에 표현하기 (0) | 2021.10.07 |
SQL 문법 | 추출 함수 | FIRST_VALUE LAST_VALUE (0) | 2021.10.05 |
윈도우 포스트그레 SQL 설치 (0) | 2021.10.04 |
SQLD SQLP 자격증 시험 아무나 볼 수 있나? (0) | 2021.10.03 |
댓글