전체 방문자
오늘
어제
21종
종이의 코딩 공부방
21종
  • 분류 전체보기 (174)
    • JAVA (64)
    • Springboot (46)
      • 블로그만들기 (45)
    • Database (60)
      • Oracle (60)
    • 프로젝트 3 (CELOVER) (0)
    • 개발서버 구축 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
21종

종이의 코딩 공부방

Database/Oracle

[Oracle] 순위를 매기는 함수 (Window Function)

2023. 7. 17. 17:08

* 순위 매기는 함수 ( WINDOW FUNCTION )


RANK() OVER(정렬기준)           |   DENSE_RANK() OVER(정렬기준)
- RANK() OVER (정렬기준) : 동일한 순위 이후의 등수를 동일한 인원수 만큼 건너뛰고 순위 계산
                            EX) 공동 1위가 2명 그 다음 순위는 3위 => 1 1 3
- DENSE_RANK() OVER(정렬기준) : 동일한 순위가 있다고 해도 그 다음 등수를 무조건 1씩 증가 시킴
                            EX) 공동 1위가 2명이더라도 그 다음 순위를 2위 => 1 1 2 
- row_number() over(정렬기준) : 동일한 순위가 있더라도 그 다음 순위를 부여 => 1 2 3 4 ..
    
>> 세 함수는 무조건 SELECT절에서만 사용 가능!! 


RANK()

-- 급여가 높은 순대로 순위를 매겨서 조회
SELECT EMP_NAME, SALARY, RANK() OVER(ORDER BY SALARY DESC) AS "순위"
FROM EMPLOYEE;
-- 공동 21위 2명 그 뒤의 순위는 23 => 마지막 순위랑 조회된 행수랑 같음

 

 

 


DENSE_RANK()

SELECT EMP_NAME, SALARY, DENSE_RANK() OVER(ORDER BY SALARY DESC) AS "순위"
FROM EMPLOYEE;
-- 공동 20위 2명 그 뒤의 순위는 21 => 마지막 순위랑 조회된 행수가 다름

 

 


* 주의사항 *

-- 상위 5명만 조회
SELECT EMP_NAME, SALARY, RANK() OVER(ORDER BY SALARY DESC) AS "순위"
FROM EMPLOYEE;
--WHERE 순위 <= 5;
--WHERE RANK() OVER(ORDER BY SALARY DESC) <= 5; -- WHERE절에 WINDOW FUNCTION X\

-- 결국 인라인뷰를 쓸 수 밖에 없음!!
SELECT *
FROM (SELECT EMP_NAME, SALARY, RANK() OVER(ORDER BY SALARY DESC) AS "순위" 
        FROM EMPLOYEE )
WHERE 순위 <= 5;

 

    'Database/Oracle' 카테고리의 다른 글
    • [Oracle] DDL(1) - CREATE
    • [Oracle] JOIN 및 subquery 실습문제
    • [Oracle] 서브쿼리 (Subquery)
    • [Oracle] 종합(~JOIN)_실습문제
    21종
    21종
    코딩 공부한 것 정리하려고 만든 블로그

    티스토리툴바