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;

 

 

복사했습니다!