Notice
Recent Posts
Recent Comments
Link
쯔이's Dev
SUBQUERY(2) 본문
반응형
[ 인라인 뷰]
FROM절에 서브쿼리를 작성하는 것
서브쿼리를 수행한 결과를 마치 테이블처럼 사용
* 인라인뷰를 주로 사용하는 예 >> TOP-N 분석 : 상위 몇개만 조회
* ROWNUM
오라클에서 제공하는 컬럼, 조회된 순서대로 1부터 순번을 부여한다.
FROM절 서브쿼리 안에서 전체 결과값의 ORDER BY절이 먼저 수행되고
그 결과를 가지고 WHERE절에서 ROWNUM을 부여해야한다.
< 주의 !! >
* FROM절에서 ORDER BY를 먼저 하지 않고, ROWNUM을 먼저 하면 순번이 부여된 후 재정렬 되기 때문에 순서가 뒤죽박죽으로 나타난다.
그러므로 ROWNUM은 반드시 인라인 뷰를 활용해줘야한다.
EX) 전 직원 중 급여가 가장 높은 5명의 이릅, 급여 조회(TOP 5)
SELECT
ROWNUM,
emp_name,
salary
FROM
(
SELECT
emp_name,
salary
FROM
employee
ORDER BY
salary DESC
)
WHERE
ROWNUM <= 5;
[ 순위를 매기는 함수 ( WINDOW FUNCTION ) ]
무조건 SELECT절에서만 사용
* 종류 : RANK( ) OVER(정렬기준), DANSE_RANK( ) OVER(정렬기준)
< RANK ( ) OVER ( 정렬기준 ) >
동일한 순위 이후의 등수를 동일한 인원 수 만큼 건너뛰고 순위계산
(공동 1등이 있다면 그 다음은 3등)
SELECT
emp_name,
salary,
RANK()
OVER(
ORDER BY
salary DESC
) AS "순위"
FROM
employee;
< DANSE_RANK ( ) OVER ( 정렬기준 ) >
동일한 순위가 있다고해도 그다음 등수를 무조건 1씩 증가
(공동 1등이 있어도 그 다음은 2등)
SELECT
emp_name,
salary,
DENSE_RANK()
OVER(
ORDER BY
salary DESC
) AS "순위"
FROM
employee;
EX) 급여가 높은 순서대로 5명
SELECT
*
FROM
(
SELECT
emp_name,
salary,
RANK()
OVER(
ORDER BY
salary DESC
) AS "순위"
FROM
employee
)
WHERE
순위 <= 5;
728x90
반응형
'SQL > SUBQUERY' 카테고리의 다른 글
SUBQUERY(1) (0) | 2024.08.26 |
---|