자꾸 까먹어서 샘플로 남겨둔다..
뇌를 자극하는 SQL SERVER 2008에서 발쵀~
--순위함수
SELECT ROW_NUMBER() OVER(ORDER BY height DESC) AS [키큰순위], NAME, ADDR, HEIGHT
FROM userTbl
ORDER BY height DESC
키큰순위 NAME ADDR HEIGHT
-------------------- ---------- ---- ------
1 최진철 제주 185
2 김남일 경북 183
3 안정환 강원 182
4 설기현 서울 182
5 박지성 서울 181
6 이천수 인천 179
7 조재진 충북 179
8 이영표 전북 178
9 박주영 경기 178
10 송종국 경기 178
--키가 동일할 경우 이름 가나다순
SELECT ROW_NUMBER() OVER(ORDER BY height DESC, name ASC) [키큰순위],
name, addr, height
FROM userTbl
ORDER BY height DESC
키큰순위 name addr height
-------------------- ---------- ---- ------
1 최진철 제주 185
2 김남일 경북 183
3 설기현 서울 182
4 안정환 강원 182
5 박지성 서울 181
6 이천수 인천 179
7 조재진 충북 179
8 박주영 경기 178
9 송종국 경기 178
10 이영표 전북 178
--전체순위가 아닌 각 지역별로 순위를 줄 시
SELECT addr, ROW_NUMBER() OVER(PARTITION BY addr ORDER BY height DESC, name ASC) [지역별 키큰순위],
name, height
FROM userTbl
ORDER BY addr, height DESC
addr 지역별 키큰순위 name height
---- -------------------- ---------- ------
강원 1 안정환 182
경기 1 박주영 178
경기 2 송종국 178
경북 1 김남일 183
서울 1 설기현 182
서울 2 박지성 181
인천 1 이천수 179
전북 1 이영표 178
제주 1 최진철 185
충북 1 조재진 179
--순위함수시에두개의 데이터를 동일한 등수로 처리
키큰순위 NAME ADDR HEIGHT
-------------------- ---------- ---- ------
1 최진철 제주 185
2 김남일 경북 183
3 안정환 강원 182
4 설기현 서울 182
5 박지성 서울 181
6 이천수 인천 179
7 조재진 충북 179
8 이영표 전북 178
9 박주영 경기 178
10 송종국 경기 178
SELECT DENSE_RANK() OVER(ORDER BY height DESC) [키큰순위],
name, addr, height
FROM userTbl
ORDER BY height DESC
키큰순위 name addr height
-------------------- ---------- ---- ------
1 최진철 제주 185
2 김남일 경북 183
3 안정환 강원 182
3 설기현 서울 182
4 박지성 서울 181
5 이천수 인천 179
5 조재진 충북 179
6 이영표 전북 178
6 박주영 경기 178
6 송종국 경기 178
--3등 2명 후 4등이 나오므로 5등부터 순위를 매길 때
SELECT RANK() OVER(ORDER BY height DESC) [키큰순위],
name, addr, height
FROM userTbl
ORDER BY height DESC
키큰순위 name addr height
-------------------- ---------- ---- ------
1 최진철 제주 185
2 김남일 경북 183
3 안정환 강원 182
3 설기현 서울 182
5 박지성 서울 181
6 이천수 인천 179
6 조재진 충북 179
8 이영표 전북 178
8 박주영 경기 178
8 송종국 경기 178
-- 그룹으로 분할하고 싶은 경우
SELECT NTILE(2) OVER(ORDER BY height DESC) [반번호],
name, addr, height
FROM userTbl
ORDER BY height DESC
반번호 name addr height
-------------------- ---------- ---- ------
1 최진철 제주 185
1 김남일 경북 183
1 안정환 강원 182
1 설기현 서울 182
1 박지성 서울 181
2 이천수 인천 179
2 조재진 충북 179
2 이영표 전북 178
2 박주영 경기 178
2 송종국 경기 178
NTILE(3) -> 1반 3명, 2반 3명, 3반 3명으로 한 후 남는 1명을 처음인 1반에 할당
NTILE(4) -> 1반 2명, 2반 2명, 3반 2명, 4반 2명으로 나눈 후에 남는 2명을 1반과 2반에 한명씩 할당
SELECT NTILE(3) OVER(ORDER BY height DESC) [반번호],
name, addr, height
FROM userTbl
ORDER BY height DESC
반번호 name addr height
-------------------- ---------- ---- ------
1 최진철 제주 185
1 김남일 경북 183
1 안정환 강원 182
1 설기현 서울 182
2 박지성 서울 181
2 이천수 인천 179
2 조재진 충북 179
3 이영표 전북 178
3 박주영 경기 178
3 송종국 경기 178
SELECT NTILE(4) OVER(ORDER BY height DESC) [반번호],
name, addr, height
FROM userTbl
ORDER BY height DESC
반번호 name addr height
-------------------- ---------- ---- ------
1 최진철 제주 185
1 김남일 경북 183
1 안정환 강원 182
2 설기현 서울 182
2 박지성 서울 181
2 이천수 인천 179
3 조재진 충북 179
3 이영표 전북 178
4 박주영 경기 178
4 송종국 경기 178
'연구개발 > DBA' 카테고리의 다른 글
identity 증가값 재 설정 (0) | 2009.06.30 |
---|---|
Windows Server 2008에서 RAID 구현 (0) | 2009.06.29 |
각종 형식의 일련번호 만들기 (0) | 2009.06.29 |
복잡한 순위 리포트의 해결 (0) | 2009.06.29 |
SQL Server의 SQL작성 자동화 프로시저 (0) | 2009.06.29 |