1. 인라인뷰(INLINE-VIEW)
FROM절에 서브쿼리를 작성하는 것
서브쿼리를 수행한 결과를 마치 하나의 테이블처럼 사용
>> ✅인라인뷰를 주로 사용하는 경우
TOP-N 분석( 전체 데이터 중 일부 데이터 조회할 때)
예시1) 사원들중 급여가 가장 높은 상위 5명만 조회
SELECT ROWNUM, E.*
FROM (SELECT EMP_NAME, SALARY, DEPT_CODE
FROM EMPLOYEE
ORDER BY SALARY DESC) E --테이블에 별칭 부여
WHERE ROWNUM <=5 ;
>ROWNUM : 오라클에서 제공해주는 컬럼, 조회된 순서대로 1부터 순번을 부여해주는 컬럼
예시2) 각 부서별 평균 급여가 가장 높은 부서 상위 3개의 부서
SELECT DEPT_CODE , FLOOR(평균급여)
FROM (SELECT DEPT_CODE ,AVG(SALARY)"평균급여"
FROM EMPLOYEE
GROUP BY DEPT_CODE
ORDER BY AVG(SALARY) DESC)
WHERE ROWNUM <= 3;
2. 순위 매기는 함수 (WINDOW FUNCTION)
-RANK() OVER(정렬기준) : 동일한 순위 이후의 등수를 해당 인원 수 만큼 건너 뛰고 계산
EX) 공동1위가 3명일때 그다음 순위를 4위로
예시) 급여가 높은 순서대로 순위를 매겨서 조회
SELECT EMP_NAME, SALARY, RANK() OVER(ORDER BY SALARY DESC)"순위"
FROM EMPLOYEE;
>>공동 19위 2명, 그다음 순위 21위
-DENSE_RANK() OVER(정렬기준) : 동일한 순위가 있다해도 다음 등수를 1씩 증가시킨 순위
EX) 공동1위가 100명이여도 그 다음 순위를 2위로
SELECT EMP_NAME, SALARY, DENSE_RANK() OVER(ORDER BY SALARY DESC)"순위"
FROM EMPLOYEE;
>>공동 19위 2명 , 그다음 순위 20위
>>위의결과에서 상위 5명만 조회하고자 할때 인라인뷰 사용
SELECT *
FROM (SELECT EMP_NAME, SALARY, RANK() OVER(ORDER BY SALARY DESC)"순위"
FROM EMPLOYEE)
WHERE 순위 <= 5;
'ORACLE' 카테고리의 다른 글
ORACLE 06. DDL (CREATE) (0) | 2022.11.22 |
---|---|
ORACLE 05. SELECT_ 서브쿼리(SUBQUERY)_ 상관 서브쿼리 (0) | 2022.11.21 |
ORACLE 05. SELECT_ 서브쿼리(SUBQUERY) (1) | 2022.11.18 |
ORACLE 04. SELECT_ JOIN _다중조인 (0) | 2022.11.17 |
ORACLE 04. SELECT_ JOIN _비등가 조인/ 자체조인/카테시안곱 (0) | 2022.11.17 |