Oracle 랭 킹 함수(Rank)실례 상세 설명

5466 단어 Oracle순위 함수
--이미 알 고 있 는 것:두 가지 순위 방식(파 티 션 과 파 티 션 없 음):파 티 션 사용 및 사용 하지 않 음
--두 가지 계산 방식(연속,불 연속),대응 함수:denserank,rank
・원본 데이터 조회:학 번,성명,과목 명,성적
select * from t_score
S_ID
S_NAME
SUB_NAME
SCORE
1
장삼
국어
80.00
2
이사
수학.
80.00
1
장삼
수학.
0.00
2
이사
국어
50.00
3
장 삼 풍
국어
10.00
3
장 삼 풍
수학.
 
3
장 삼 풍
스포츠
120.00
4
양 과
JAVA
90.00
5
mike
c++
80.00
3
장 삼 풍
Oracle
0.00
4
양 과
Oracle
77.00
2
이사
Oracle
77.00
·학생 과목 별 조 회 는 오 라 클 순위(단순 순위)
select sc.s_id,sc.s_name,sub_name,sc.score,
rank()over(order by score desc)순위
from t_score sc
where sub_name='Oracle'
S_ID
S_NAME
SUB_NAME
SCORE
석차
4
양 과
Oracle
77.00
1
2
이사
Oracle
77.00
1
3
장 삼 풍
Oracle
0.00
3
대비:rank()와 denserank():비 연속 순위 와 연속 순위(모두 단순 순위)
select sc.s_id,sc.s_name,sub_name,sc.score,
dense_rank()over(order by score desc)순위
from t_score sc
where sub_name='Oracle'
S_ID
S_NAME
SUB_NAME
SCORE
석차
4
양 과
Oracle
77.00
1
2
이사
Oracle
77.00
1
3
장 삼 풍
Oracle
0.00
2
·학생 별 과목 별 순위 조회(구역 별 순위)
select sc.s_id,sc.s_name,sub_name,sc.score,
rank() over
(partition by sub_name order by score desc)순위
from t_score sc
S_ID
S_NAME
SUB_NAME
SCORE
석차
4
양 과
JAVA
90.00
1
4
양 과
Oracle
77.00
1
2
이사
Oracle
77.00
1
3
장 삼 풍
Oracle
0.00
3
5
mike
c++
80.00
1
3
장 삼 풍
수학.
 
1
2
이사
수학.
80.00
2
1
장삼
수학.
0.00
3
3
장 삼 풍
스포츠
120.00
1
1
장삼
국어
80.00
1
2
이사
국어
50.00
2
3
장 삼 풍
국어
10.00
3
·과목 별 상위 2 위 권 조회(구역 별 순위)
・유사:뉴스 리스트,구 코너 조회 수 상위 3 위 뉴스.
상품 표,각 유형의 매출 액 이 10 위 안에 드 는 상품 을 구하 세 요.

select * from (
select sc.s_id,sc.s_name,sub_name,sc.score,
dense_rank() over
(partition by sub_name order by score desc)   
from t_score sc
) x
where x.  <=2
S_ID
S_NAME
SUB_NAME
SCORE
석차
4
양 과
JAVA
90.00
1
4
양 과
Oracle
77.00
1
2
이사
Oracle
77.00
1
3
장 삼 풍
Oracle
0.00
2
5
mike
c++
80.00
1
3
장 삼 풍
수학.
 
1
2
이사
수학.
80.00
2
3
장 삼 풍
스포츠
120.00
1
1
장삼
국어
80.00
1
2
이사
국어
50.00
2
・동창 별 총 점 조회
select s_id,s_name,sum(score) sum_score from t_score
group by s_id,s_name
S_ID
S_NAME
SUM_SCORE
1
장삼
80.00
2
이사
207.00
3
장 삼 풍
130.00
4
양 과
167.00
5
mike
80.00
・총 점 에 따라 학생 별 순 위 를 조회
select x.*,
rank() over (order by sum_score desc)순위
from (
select s_id,s_name,sum(score) sum_score from t_score
group by s_id,s_name ) x
S_ID
S_NAME
SUM_SCORE
석차
2
이사
207.00
1
4
양 과
167.00
2
3
장 삼 풍
130.00
3
1
장삼
80.00
4
5
mike
80.00
4
문법:
rank()over(order by 정렬 필드 순서)
rank()over(파 티 션 은 그룹 필드 순서 로 정렬 필드 순서 로)
1.순서:asc|desc 순위 와 업무 관련:
예:우수 학생 찾기:성적:내림차 지각 횟수:오름차 순
2.파 티 션 필드:어떤 필드 에 따라 파 티 션 을 진행 합 니까?
문제:파 티 션 과 그룹 은 어떤 차이 가 있 습 니까?
・파 티 션 은 원본 데 이 터 를 순위 로 배열 할 뿐(기록 수 는 변 하지 않 음),
/그룹 을 나 누 는 것 은 원시 데 이 터 를 집계 하 는 것 입 니 다.(기록 수가 줄 어 들 고 각 그룹 이 한 개 씩 되 돌려 줍 니 다.)주의:집합.
스 크 립 트:

create table t_score
(
 autoid number primary key,
 s_id  number(3),
 s_name char(8) not null,
 sub_name varchar2(20),
 score number(10,2)
);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (8, 1, '   ', '  ', 80);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (9, 2, '   ', '  ', 80);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (10, 1, '   ', '  ', 0);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (11, 2, '   ', '  ', 50);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (12, 3, '    ', '  ', 10);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (13, 3, '    ', '  ', null);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (14, 3, '    ', '  ', 120);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (15, 4, '   ', 'java', 90);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (16, 5, 'mike ', 'c++', 80);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (3, 3, '    ', 'oracle', 0);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (4, 4, '   ', 'oracle', 77);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (17, 2, '   ', 'oracle', 77);
commit;

좋은 웹페이지 즐겨찾기