특정 정렬순서에 의해 순위를 부여하고싶다면 ROW_NUMBER(), RANK(), DENSE_RANK()를 사용하면 된다.
ROW_NUMBER() - 단순 정렬후 순위 부여
RANK() - 중복의 경우 같은 순위 부여, 중복수만큼 순위 건너뜀
DENSE_RANK() - 중복의 경우 같은 순위 부여, 바로 순위 시작
순위 부여
SELECT 순위함수 OVER (ORDER BY 컬럼1 정렬순서, 컬럼2 정렬순서) AS RNK
SELECT RANK() OVER (ORDER BY COLUMN1 ASC, COLUMN2 DESC) AS RNK
그룹별 순위부여
SELECT 순위함수 OVER (PARTITION BY 컬럼3 ORDER BY 컬럼1 정렬순서, 컬럼2 정렬순서) AS RNK
SELECT RANK() OVER (PARTITION BY COLUMN3 ORDER BY COLUMN1 ASC, COLUMN2 DESC) AS RNK
KEEP함수
[MAX/MIN](B) KEEP (DENSE_RANK [FIRST/LAST] ORDER BY A [ASC/DESC])
A컬럼으로 정렬한 후, 지정된 행의 B값을 가지고온다.
FIRST/LAST는 정렬한 값의 처음과 마지막을 가지고온다.
KEEP함수는 값을 정렬한후 다른 컬럼을 출력하고 싶을 때 사용한다.
KEEP은 영어 그대로 유지하다라는 뜻이다. 정렬된 값을 유지한 후 원하는 값을 출력한다.
EX) "직원들중 급여가 가장작은사람과 높은사람의 이름은 뭐지?"
SELECT
MAX(NAME) KEEP (DENSE_RANK FIRST ORDER BY SAL DESC) MAX_SAL_NAME
,MIN(NAME) KEEP (DENSE_RANK LAST ORDER BY SAL DESC) MIN_SAL_NAME
FROM EMP
[ORACLE] 날짜 처리 함수 (1) | 2021.11.08 |
---|---|
[ORACLE] 문자열 처리 함수 (2) | 2021.11.05 |
[ORACLE] 모든 테이블, 컬럼 조회 (0) | 2021.11.04 |
[ORACLE] 계층형 쿼리 START WITH CONNECT BY 사용법 (1) | 2021.10.25 |
[ORACLE] TO_CHAR 기본 사용법 (4) | 2021.10.21 |
댓글 영역