SQL

SQL 문법 정리 : (FIRST_VALUE,LAST_VALUE,LAG,LEAD)

Nova 2021. 2. 18. 18:01

SQL 문법 정리 : (FIRST_VALUE,LAST_VALUE,LAG,LEAD)

 

FIRST_VALUE

특정 집합 내에서 결과 건수의 변화 없이 해당 집합안에서 특정 컬럼의 첫번재 값을  구하는 함수이다.

 

SELECT 

        A.PRODUCT_NAME, B.GROUP_NAME, A.PRICE

      ,FIRST_VALUE (A.PRICE) OVER

        (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE)

        AS LOWER_PRICE_PER_GROUP

FROM PRODUCT A

INNER JOIN PRODUCT_GROUP B

             ON (A.GROUP_ID = B.GROUP_ID);

(#가장 첫번째 나오는 PRICE값을 출력한다.GROUP_NAME 컬럼 기준으로 PRICE컬럼으로 정렬한 값중에서)

(#GROUP_NAME 기준 PRICE가 가장 작은 값이 출력되었다.)

 

LAST_VALUE

 

특정 집합 내에서 결과 건수의 변화 없이 해당 집합안에서 특정 컬럼의 혹은 마지막 값을 구하는 함수이다.

 

SELECT

        A.PRODUCT_NAME, B.GROUP_NAME, A.PRICE

      , LAST_VALUE (A.PRICE) OVER

        (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE

         RANGE BETWEEN UNBOUNDED PRECEDING

         AND UNBOUNDED FOLLOWING)

        AS LOWER_PRICE_PER_GROUP

FROM PRODUCT A

INNER JOIN PRODUCT_GROUP B

             ON (A.GROUP_ID = B.GROUP_ID);

(#가장 마지막에 나오는 PRICE값을 출력한다.GROUP_NAME 컬럼 기준으로 PRICE컬럼으로 정렬한 값중에서)

(#파티션의 첫번째로우부터 파티션이 마지막 로우까지)

(#GROUP_NAME기준 PRICE가 가장 큰 값이 출력되었다)

 

LAG()

 

특정 집합 내에서 결과 건수의 변화 없이 해당 집합안에서 특정 컬럼의 이전행의 값을 찾는다.

 

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(PRICE, 1) OVER ( PARTITION BY 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);

 

(#PRICE의 이전 행의 값을 구한다. GROUP_NAME컬럼 기준으로 PRICE컬럼으로 정렬한 값 중에서)

(#현재형의 PRICE에서 이전행의 PRICE를 뺀다.GROUP_NAME컬럼 기준으로 PRICE컬럼으로 정렬한 값 중에서)

 

LEAD

 

특정 집합 내에서 결과 건수의 변화 없이 해당 집합안에서 특정 컬럼의 다음 행의 값을 찾는다.

 

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(PRICE, 1) OVER ( PARTITION BY 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);

(#PRICE의 다음 행의 값을 구한다. GROUP_NAME컬럼 기준으로 PRICE컬럼으로 정렬한 값 중에서)

(#현재형의 PRICE에서 이전행의 PRICE를 뺀다.GROUP_NAME컬럼 기준으로 PRICE컬럼으로 정렬한 값 중에서)