반응형
반응형

자꾸 까먹어서 샘플로 남겨둔다..
뇌를 자극하는 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

반응형

+ Recent posts

반응형