[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 |
Leave a comment