[SQL] 046. 데이터 분석 함수로 바로 전 행과 다음 행 출력하기

Updated:

초보자를 위한 SQL 200제 교재를 토대로 공부한 내용입니다.

오라클 SQL을 기반으로 합니다.

실습에 사용한 테이블은 정보문화사 홈페이지에서 받을 수 있습니다.


[예시]

LAG() OVER는 이전 행을 출력하는 함수이다.

LEAD() OVER는 다음 행을 출력하는 함수이다.

함수 안에 컬럼과 숫자를 입력하면 입력한 숫자만큼 이전(다음) 행을 출력한다.

-- LAG(컬럼, N번째 이전행) OVER ()
-- LEAD(컬럼, N번째 다음행) OVER ()
SELECT JOB, ENAME, SAL,
       LAG(SAL,1) OVER (ORDER BY SAL) AS 전행,
       LEAD(SAL,1) OVER (ORDER BY SAL) AS 다음행
FROM EMP
WHERE JOB = 'MANAGER';

[결과]

바로 전 행과 다음 행 값이 출력된다.

JOB ENAME SAL 전행 다음행
MANAGER CLARK 2450   2850
MANAGER BLAKE 2850 2450 2975
MANAGER JONES 2975 2850  

[예시2]

PARTITION BY로 그룹별로 적용 가능하다.

-- PARTITION BY 사용 직업별로 적용
SELECT JOB, ENAME, SAL,
       LAG(SAL,1) OVER (PARTITION BY JOB ORDER BY SAL) AS 전행,
       LEAD(SAL,1) OVER (PARTITION BY JOB ORDER BY SAL) AS 다음행
FROM EMP;

[결과2]

JOB ENAME SAL 전행 다음행
ANALYST FORD 3000   3000
ANALYST SCOTT 3000 3000  
CLERK SMITH 800   950
CLERK JAMES 950 800 1100
CLERK ADAMS 1100 950 1300
CLERK MILLER 1300 1100  
MANAGER CLARK 2450   2850
MANAGER BLAKE 2850 2450 2975
MANAGER JONES 2975 2850  
PRESIDENT KING 5000    
SALESMAN WARD 1250   1250
SALESMAN MARTIN 1250 1250 1500
SALESMAN TURNER 1500 1250 1600
SALESMAN ALLEN 1600 1500  

Tags:

Categories:

Updated:

Leave a comment