aggregate function 중에 first, last 함수를 사용해 보자.
이 first, last 함수를 잘만 쓰면, inline view를 한 번 덜 쓸 수도 있겠다.
아래 예제를 보자.
오라클의 demo 테이블인 emp 테이블은 아래와 같다.
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ----------
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7566 JONES MANAGER 7839 81/04/02 2975 20
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
7369 SMITH CLERK 7902 80/12/17 800 20
7698 BLAKE MANAGER 7839 81/05/01 2850 30
7782 CLARK MANAGER 7839 81/06/09 2450 10
7900 JAMES CLERK 7698 81/12/03 950 30
7839 KING PRESIDENT 81/11/17 5000 10
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7902 FORD ANALYST 7566 81/12/03 3000 20
7934 MILLER CLERK 7782 82/01/23 1300 10
7788 SCOTT ANALYST 7566 82/12/09 3000 20
7876 ADAMS CLERK 7788 83/01/12 1100 20
여기에서 deptno 별로 가장 sal 이 많은 사람(동일할 경우 이름순)의
deptno,empno,ename,sal 를 각각 구해보자.
쿼리는 first 함수를 써서 inline view 없이 아래와 같이 되겠다.
SELECT deptno,
MAX (empno) KEEP (DENSE_RANK FIRST ORDER BY sal DESC, ename) max_empno,
MAX (ename) KEEP (DENSE_RANK FIRST ORDER BY sal DESC, ename) max_ename,
MAX (sal)
FROM emp
GROUP BY deptno