분석용 함수(Analytical Function)
RANK
RANK() OVER ( query_partition_clause ORDER_BY clause) : 이전에 보았던 RANK 함수는 그룹함수로서의 기능을 하였다. 이번에는 분석기능을 하는, 즉 전체 행을 대상으로 각각의 행에 대해 순위를 계산하는 역할을 한다.
--> KOR 이름의 Table을 만들고 이름, 성적, 반 3개의 컬럼을 갖도록 구성하자. 아래의 create table문의 default 0이라는 의미는 marks에 값이 들어 오지 않은 경우에는 기본적으로 0이 입력된다는 의미이다.
SQL> create table kor (
2 name varchar2(10) not null,
3 marks number(3,0) default 0,
4 ban number(1,0) not null)
5 ;
테이블이 생성되었습니다.
SQL> insert into kor values ('가길동', 88, 1);
SQL> insert into kor values ('나길동', 64, 2);
SQL> insert into kor values ('다길동', 78, 1);
SQL> insert into kor values ('라길동', 99, 1);
SQL> insert into kor values ('마길동', 78, 1);
SQL> insert into kor values ('바길동', 89, 2);
SQL> commit;
커밋이 완료되었습니다.
--> 아래의 SQL문은 반에 관계없이 전체에서의 석차를 구하는 것이다. RANK와 DENSE_RANK의 차이에 대해서는 눈으로 확인하길 바란다.
SQL> select name "이름",
2 marks "성적",
3 ban "반",
4 rank() over (order by marks desc) "석차1",
5 dense_rank() over (order by marks desc) "석차2"
6 from kor;
이름 성적 반 석차1 석차2
---------- ---------- ---------- ---------- ----------
라길동 99 1 1 1
바길동 89 2 2 2
가길동 88 1 3 3
다길동 78 1 4 4
마길동 78 1 4 4
나길동 64 2 6 5
6 개의 행이 선택되었습니다.
--> 아래의 예문은 반내에서의 석차를 구하는 예문이다. 주요한 키워드는 PARTITION BY이니 기억해 두기 바란다.
SQL> select name "이름",
2 marks "성적",
3 ban "반",
4 rank() over (partition by ban
5 order by marks desc) "반 석차"
6 from kor
7 /
이름 성적 반 반 석차
---------- ---------- ---------- ----------
라길동 99 1 1
가길동 88 1 2
다길동 78 1 3
마길동 78 1 3
바길동 89 2 1
나길동 64 2 2
--> 그럼 위의 예문을 참고하여 EMP Table에서 부서별로 급여가 높은 순위를 알기 위해서는 어떻게 하는지는 아래의 예문을 통해 참고하자.
SQL> select ename, sal, deptno,
2 rank() over (partition by deptno order by sal desc) "Ranking"
3 from emp;
ENAME SAL DEPTNO Ranking
---------- ---------- ---------- ----------
KING 5000 10 1
CLARK 2450 10 2
MILLER 1300 10 3
SCOTT 3000 20 1
FORD 3000 20 1
JONES 2975 20 3
ADAMS 1100 20 4
SMITH 800 20 5
RANK
RANK() OVER ( query_partition_clause ORDER_BY clause) : 이전에 보았던 RANK 함수는 그룹함수로서의 기능을 하였다. 이번에는 분석기능을 하는, 즉 전체 행을 대상으로 각각의 행에 대해 순위를 계산하는 역할을 한다.
--> KOR 이름의 Table을 만들고 이름, 성적, 반 3개의 컬럼을 갖도록 구성하자. 아래의 create table문의 default 0이라는 의미는 marks에 값이 들어 오지 않은 경우에는 기본적으로 0이 입력된다는 의미이다.
SQL> create table kor (
2 name varchar2(10) not null,
3 marks number(3,0) default 0,
4 ban number(1,0) not null)
5 ;
테이블이 생성되었습니다.
SQL> insert into kor values ('가길동', 88, 1);
SQL> insert into kor values ('나길동', 64, 2);
SQL> insert into kor values ('다길동', 78, 1);
SQL> insert into kor values ('라길동', 99, 1);
SQL> insert into kor values ('마길동', 78, 1);
SQL> insert into kor values ('바길동', 89, 2);
SQL> commit;
커밋이 완료되었습니다.
--> 아래의 SQL문은 반에 관계없이 전체에서의 석차를 구하는 것이다. RANK와 DENSE_RANK의 차이에 대해서는 눈으로 확인하길 바란다.
SQL> select name "이름",
2 marks "성적",
3 ban "반",
4 rank() over (order by marks desc) "석차1",
5 dense_rank() over (order by marks desc) "석차2"
6 from kor;
이름 성적 반 석차1 석차2
---------- ---------- ---------- ---------- ----------
라길동 99 1 1 1
바길동 89 2 2 2
가길동 88 1 3 3
다길동 78 1 4 4
마길동 78 1 4 4
나길동 64 2 6 5
6 개의 행이 선택되었습니다.
--> 아래의 예문은 반내에서의 석차를 구하는 예문이다. 주요한 키워드는 PARTITION BY이니 기억해 두기 바란다.
SQL> select name "이름",
2 marks "성적",
3 ban "반",
4 rank() over (partition by ban
5 order by marks desc) "반 석차"
6 from kor
7 /
이름 성적 반 반 석차
---------- ---------- ---------- ----------
라길동 99 1 1
가길동 88 1 2
다길동 78 1 3
마길동 78 1 3
바길동 89 2 1
나길동 64 2 2
--> 그럼 위의 예문을 참고하여 EMP Table에서 부서별로 급여가 높은 순위를 알기 위해서는 어떻게 하는지는 아래의 예문을 통해 참고하자.
SQL> select ename, sal, deptno,
2 rank() over (partition by deptno order by sal desc) "Ranking"
3 from emp;
ENAME SAL DEPTNO Ranking
---------- ---------- ---------- ----------
KING 5000 10 1
CLARK 2450 10 2
MILLER 1300 10 3
SCOTT 3000 20 1
FORD 3000 20 1
JONES 2975 20 3
ADAMS 1100 20 4
SMITH 800 20 5
[개강확정강좌]오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)
[주말]
[10/26]C#,ASP.NET마스터
[11/2]Spring3.X, MyBatis, Hibernate실무과정
[11/2]JAVA&WEB프레임워크실무과정
[평일야간]
[10/29]C#,ASP.NET마스터
[10/31]JAVA&WEB프레임워크실무과정
[11/1]Spring3.X, MyBatis, Hibernate실무과정
[주간]
[11/4]Spring3.X, MyBatis, Hibernate실무과정
[주말]
[10/26]C#,ASP.NET마스터
[11/2]Spring3.X, MyBatis, Hibernate실무과정
[11/2]JAVA&WEB프레임워크실무과정
[평일야간]
[10/29]C#,ASP.NET마스터
[10/31]JAVA&WEB프레임워크실무과정
[11/1]Spring3.X, MyBatis, Hibernate실무과정
[주간]
[11/4]Spring3.X, MyBatis, Hibernate실무과정
[기타
다른 강좌는 아래 해당 카테고리를 클릭해주세요]
댓글 없음:
댓글 쓰기