본문 바로가기
SQLD/SQL 기본 및 활용

윈도우 함수(WINDOW FUNCTION) 4 - 그룹 내 행 순서 함수

by 밍구몬 2019. 7. 4.

FIRST_VALUE

파티션별 윈도우에서 가장 먼저 나온 값을 구할 있음.

 

EX1) 부서별 직원들을 연봉이 높은 순서부터 정렬하고, 파티션 내에서 가장 먼저 나온 출력

SELECT DEPTNO, ENAME, SAL, 
	FIRST_VALUE(SAL) OVER ( PARTITION BY DEPTNO ORDER BY SAL DESC) AS FIRST_VALUE
FROM EMP;

LAST_VALUE

파티션별 윈도우에서 가장 나중에 나온 값을 구할 수 있음.

 

EX1) 부서별 직원들을 연봉이 높은 순서부터 정렬하고, 파티션 내에서 가장 나중에 나온  출력

SELECT DEPTNO, ENAME, SAL, LAST_VALUE(SAL) OVER ( PARTITION BY DEPTNO ) AS LAST_VALUE
FROM EMP;

LAG

파티션별 윈도우에서 이전 N번째 데이터를 가져올 수 있다.

LAG 함수는 3개의 인자까지 사용할 수 있으며,

첫 번째는 컬럼명, 두 번째는 몇 번째 앞의 행을 가져올지, 세 번째는 가져올 데이터가 없을 경우 넣을 값이다.

두 번째와 세 번째 인자는 생략 가능하다. 생략하게 되면 바로 이전의 데이터를 가져오며 데이터가 없을경우 NULL이다.

 

EX1) 두 행 앞의 SALARY를 가져오고, 값이 없을 경우는 0 출력

SELECT ENAME, SAL, LAG(SAL,2,0) OVER (ORDER BY SAL) AS PRE_SAL
FROM EMP;

LEAD

LAG와 반대로 이전이 아닌 이후의 N번째 행의 값을 가져올 수 있다.

LAG와 마찬가지로 3개의 아규먼트를 받을 수 있다.

 

EX1) 입사일이 빠른순으로 정렬하고, 그 다음 입사자의 입사일을 출력

SELECT ENAME, HIREDATE, LEAD(HIREDATE,1) OVER (ORDER BY HIREDATE) AS NEXT
FROM EMP;