일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 선택적조인
- jsr 296
- sencha touch
- 가우스
- MySQL
- Ajax
- WebLogic
- ibsheet
- JDOM
- iBATIS
- jQuery
- tomcat
- MFC
- node.js
- oracle
- PLSQL
- 전자정부프레임워크
- Spring
- dock
- Eclipse
- swingx
- Struts
- GPS
- Android
- JSON
- Google Map
- PHP
- appspresso
- rowspan
- phonegap
Archives
- Today
- Total
Where The Streets Have No Name
rank() 본문
RANK와 DENSE_RANK는 어떤 한 GROUP에서 항목들의 순위를 매길 수 있는 기능을 제공한다.
SYNTAX :
RANK() OVER ( [PARTITION BY
ORDER BY
[NULLS FIRST|NULLS LAST] [, ...] )
DENSE_RANK() OVER (
[PARTITION BY
ORDER BY
[NULLS FIRST|NULLS LAST] [, ...] )
1.RANK의 특징
- 정렬 순서는 ascending이 default이며 descending으로 지정이 가능하다.
- PARTITION BY는 선택항목이며 QUERY의 RESULT SET을 RANK FUNCTION을 적용할 GROUP으로 나눈다.다시 말해 RANK는 GROUP이 바뀔 때 마다 새로운 SET에 대하여 연산을 수행하게 된다.
- PARTITION BY 절이 생략되면 RANK는 QUERY의 전체 RESULT SET에 적용된다.
- ORDER BY는 순위가 매겨지는 기준을 정의하는 절이다.
- NULLS FIRST나 NULL LAST는 ORDER SEQUENCE에서 NULL의 위치를 나타낸다.
RANK와 DENSE_RANK의 차이는 순위가 같을 때 RANK는 ranking sequence에 gap을 허용하지만 DENSE_RANK는 gap을 허용하지 않는다.
2.RANKING ORDER다음은 [ASC | DESC]이 어떻게 ranking order를 변화시키는지를 보여주는 사례이다.
SELECT deptno,empno, sal,
RANK() OVER (ORDER BY sal) AS asc_rank,
RANK() OVER (ORDER BY sal desc nulls last) as desc_rank
FROM emp;
DEPTNO | EMPNO | SAL | ASC_RANK | DESC_RANK |
10 | 7839 | 5000 | 14 | 1 |
20 | 7788 | 3000 | 12 | 2 |
20 | 7902 | 3000 | 12 | 2 |
20 | 7566 | 2975 | 11 | 4 |
30 | 7698 | 2850 | 10 | 5 |
10 | 7782 | 2450 | 9 | 6 |
30 | 7499 | 1600 | 8 | 7 |
30 | 7844 | 1500 | 7 | 8 |
10 | 7934 | 1300 | 6 | 9 |
30 | 7521 | 1250 | 4 | 10 |
30 | 7654 | 1250 | 4 | 10 |
20 | 7876 | 1100 | 3 | 12 |
30 | 7900 | 950 | 2 | 13 |
20 | 7369 | 800 | 1 | 14 |
3.Ranking on multiple Expressions
Result Set에서 Ranking을 매기고자 하는 value가 동률을 이룰 때 이것을 해결하기 위해 다른 expression을 사용할 수 있다.
SELECT deptno,empno, sal,
RANK() OVER (ORDER BY sal desc,empno nulls last) as desc_rank
FROM emp
WHERE DEPTNO = 30;
DEPTNO | EMPNO | SAL | DESC_RANK |
30 | 7698 | 2850 | 1 |
30 | 7499 | 1600 | 2 |
30 | 7844 | 1500 | 3 |
30 | 7521 | 1250 | 4 |
30 | 7654 | 1250 | 5 |
30 | 7900 | 950 | 6 |