control Y

[오라클] 순위 관련 함수 본문

KH정보교육원/SQL

[오라클] 순위 관련 함수

ControlY 2023. 6. 22. 17:33

RANK()

중복 순위 개수만큼 다음 순위 값을 증가 시킴
형식 : RANK() OVER(ORDER BY 컬럼명 (ASC|DESC)) (AS 별칭)

EX 1) 사원테이블에서 80번 부서에 소속된 사원 중에서 입사년도가 가장 최근에 입사한 순부터 사원번호, 사원명, 입사일자, 순위를 부여하여 출력해보자

SELECT EMPLOYEE_ID AS 사원번호, FIRST_NAME AS 사원명, HIRE_DATE AS 입사일자,
        RANK() OVER(ORDER BY HIRE_DATE DESC) AS 순위
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 80;

 

DENSE_RANK()

중복 순위가 존재해도 순차적으로 다음 순위 값을 표시함 

EX 2) 사원테이블에서 80번 부서에 소속된 사원 중에서 급여가 가장 높은 순으로 사원번호, 사원명, 입사일자, 순위를 부여하여 출력해보자

SELECT EMPLOYEE_ID AS 사원번호, FIRST_NAME AS 사원명, SALARY AS 급여,
        DENSE_RANK() OVER(ORDER BY SALARY DESC) AS 순위
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 80;

 

ROW_NUMBER() 

중복값에 관계없이 SEQUENCE(순차적인 순위 값) 값을 반환

 

EX 3)  각 부서에 소속된 사원 한명만을 출력 (사원번호, 사원명, 직무번호, 급여, 부서번호)

SELECT EMPLOYEE_ID,
        FIRST_NAME,
        JOB_ID,
        DEPARTMENT_ID,
        ROW_NUMBER() OVER(PARTITION BY DEPARTMENT_ID ORDER BY EMPLOYEE_ID) AS RNUM
FROM EMPLOYEES
ORDER BY DEPARTMENT_ID;

EX 4)  EMPLOYEES 테이블에서 각 부서별 입사일이 가장 오래된 사원의 사원번호, 사원명, 부서번호, 입사일을 출력하라 > 중복된 입사일은 한명만 출력(ROW_NUMBER)

SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID, TO_CHAR(HIRE_DATE, 'YYYY-MM-DD') HIRE_DATE
FROM (SELECT ROW_NUMBER() OVER(PARTITION BY DEPARTMENT_ID ORDER BY EMPLOYEE_ID DESC) AS RNUM,
            EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID, HIRE_DATE
            FROM EMPLOYEES
            WHERE TO_CHAR(HIRE_DATE, 'YYYY-MM-DD')IN (SELECT TO_CHAR(MIN(HIRE_DATE),'YYYY-MM-DD')
                                                        FROM EMPLOYEES GROUP BY DEPARTMENT_ID)) E
WHERE E.RNUM =1 
AND DEPARTMENT_ID IS NOT NULL;

 

 

반응형

'KH정보교육원 > SQL' 카테고리의 다른 글

[오라클] 시퀀스 정리  (0) 2023.06.23
[오라클] PARTITION BY  (0) 2023.06.23
[오라클] 뷰  (1) 2023.06.22
[오라클] 그룹함수 관련 과제  (0) 2023.06.21
[오라클] 서브쿼리 정리  (0) 2023.06.21