개키우는개발자 : )

PostgreSQL LAG,LEAD 함수 본문

PostgreSQL/조인과 집계 데이터

PostgreSQL LAG,LEAD 함수

DOGvelopers 2019. 11. 9. 19:53
반응형

실습 테이블 만들기 https://dog-developers.tistory.com/154

LAG,LEAD 함수

특정 집합 내에서 결과 건수의 변화 없이 해당 집합안에서 특정 컬럼의 이전 행의 값 혹은 다음 행의 값을 구합니다.

 

실습

 

LAG

 

1. PRODUCT 테이블과 PRODUCT_GROUP 테이블을 GROUP_ID 기준으로 INNER JOIN 합니다.

2. PRICE의 이전 행의 값을 구합니다.

3. 현재 행에서 이전행의 PRICE값을 뺍니다.

4. GROUP_NAME 컬럼 기준으로 PRICE컬럼으로 정렬 합니다.

SELECT
	A.PRODUCT_NAME,
	B.GROUP_NAME,
	A.PRICE,
			  LAG(A.PRICE, 1) OVER (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE) AS PREV_PRICE,
	A.PRICE - LAG(A.PRICE, 1) OVER (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE) AS CUR_PREV_DIFF
FROM
	PRODUCT A
INNER JOIN PRODUCT_GROUP B 
ON (A.GROUP_ID = B.GROUP_ID)

LAPTOP을 기준으로 설명을 하자면 

1행의 PRICE 이전값은 NULL 이전값이 존재하지 않으므로 이전 PRICE값을 뺀 값도 NULL이고

2행의 이전(1행) PRICE 값은 700 현재 행의 PRICE 가격도 700 뺀 가격은 0

3행의 이전(2행) PRICE 값은 700 현재 행의 PRICE 가격은 800 두 PRICE의 빼기 값은 100.. 식으로

이전행과 현재행의 PRICE 값으로 계산된 값을 조회할 수 있습니다. 

실습1

- 이전,이전 행의 값도 계산이 가능합니다.

SELECT
	A.PRODUCT_NAME,
	B.GROUP_NAME,
	A.PRICE,
			  LAG(A.PRICE, 2) OVER (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE) AS PREV_PRICE,
	A.PRICE - LAG(A.PRICE, 2) OVER (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE) AS CUR_PREV_DIFF
FROM
	PRODUCT A
INNER JOIN PRODUCT_GROUP B 
ON (A.GROUP_ID = B.GROUP_ID)

실습2

LEAD

 

1. PRODUCT 테이블과 PRODUCT_GROUP 테이블을 GROUP_ID 기준으로 INNER JOIN 합니다.

2. PRICE의 다음 행의 값을 구합니다.

3. 현재 행에서 다음 행의 PRICE값을 뺍니다.

4. GROUP_NAME 컬럼 기준으로 PRICE컬럼으로 정렬 합니다.

SELECT
	A.PRODUCT_NAME,
	B.GROUP_NAME,
	A.PRICE,
			  LEAD(A.PRICE, 1) OVER (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE) AS PREV_PRICE,
	A.PRICE - LEAD(A.PRICE, 1) OVER (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE) AS CUR_PREV_DIFF
FROM
	PRODUCT A
INNER JOIN PRODUCT_GROUP B 
ON (A.GROUP_ID = B.GROUP_ID)

실습3

 

이전,다음 행의 값을 현재의 행의 값과 연관되어 계산을 할때 매우 중요한 함수입니다.

반응형

'PostgreSQL > 조인과 집계 데이터' 카테고리의 다른 글

PostgreSQL 실습문제2  (0) 2019.11.09
PostgreSQL 실습문제1  (0) 2019.11.09
PostgreSQL ROW_NUMBER, RANK, DENSE_RANK 함수  (0) 2019.11.09
PostgreSQL 분석함수 AVG 함수  (0) 2019.11.09
PostgreSQL 분석함수  (0) 2019.11.09
Comments