sql server 2000 sql server 2005 에 대응 하 는 rownumber()、rank()、DENSE_RANK (), ntile () 등 용법
8038 단어 SQL Server 2000
SQL server 2005 에 추 가 된 몇 가지 함수, 각각 rownumber( )、rank (),, DENSE RANK (), ntile () 다음은 실례 를 들 어 간단하게 설명 합 니 다. 1. row number () 먼저 데 이 터 를 좀 하고, 먼저 표를 작성 하 다.
SET NOCOUNT ON
CREATE TABLE Person(
FirstName VARCHAR(10),
Age INT,
Gender CHAR(1))
INSERT INTO Person VALUES ('Ted',23,'M')
INSERT INTO Person VALUES ('John',40,'M')
INSERT INTO Person VALUES ('George',6,'M')
INSERT INTO Person VALUES ('Mary',11,'F')
INSERT INTO Person VALUES ('Sam',17,'M')
INSERT INTO Person VALUES ('Doris',6,'F')
INSERT INTO Person VALUES ('Frank',38,'M')
INSERT INTO Person VALUES ('Larry',5,'M')
INSERT INTO Person VALUES ('Sue',29,'F')
INSERT INTO Person VALUES ('Sherry',11,'F')
INSERT INTO Person VALUES ('Marty',23,'F')
직접 예 를 들 어 문 제 를 설명 한다.
SELECT ROW_NUMBER() OVER (ORDER BY Age) AS [Row Number by Age],
FirstName,
Age
FROM Person
나타 난 데 이 터 는 다음 과 같다.
Row Number by Age FirstName Age
-------------------------- ---------- --------
1 Larry 5
2 Doris 6
3 George 6
4 Mary 11
5 Sherry 11
6 Sam 17
7 Ted 23
8 Marty 23
9 Sue 29
10 Frank 38
11 John 40
, , row_number() , Row Number by Age,
sql server2000 :
sql server2000 , IDENTITY() , IDENTITY() sql server2000 , 。
select identity(int,1,1) as [Row Number by Age],FirstName,Age into #A from Person order by Age
select * from #A
drop table #a
,
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS [Row Number by Record Set],
FirstName,
Age
FROM Person
SELECT ROW_NUMBER() OVER (PARTITION BY Gender ORDER BY Age) AS [Partition by Gender],
FirstName,
Age,
Gender
FROM Person
여 기 는 성별 에 따라 구간 을 나 누고, 같은 성별 은 나이 에 따라 정렬 하 며, 수출 결 과 는 다음 과 같다.
Partition by Gender FirstName Age Gender
-------------------- ---------- ----------- ------
1 Doris 6 F
2 Mary 11 F
3 Sherry 11 F
4 Sue 29 F
1 Larry 5 M
2 George 6 M
3 Sam 17 M
4 Ted 23 M
5 Marty 23 M
6 Frank 38 M
7 John 40 M
주의 하 세 요. 이름 M 부터 번호 가 1, 2, 3 부터 시작 되 었 습 니 다.
2.RANK( )
SELECT RANK() OVER (ORDER BY Age) AS [Rank by Age],
FirstName,
Age
FROM Person
:
Rank by Age FirstName Age
-------------------- ---------- -----------
1 Larry 5
2 Doris 6
2 George 6
4 Mary 11
4 Sherry 11
6 Sam 17
7 Ted 23
7 Marty 23
9 Sue 29
10 Frank 38
11 John 40
, , , 1,2,2,4 。
sql server2000 :
RANK() , sql server2000 。
select [Rank by Age]=isnull((select count(*) from person where Age>A.Age),0)+1,FirstName,Age from Person A order by [Rank by Age]
SELECT RANK() OVER(PARTITION BY Gender ORDER BY Age) AS [Partition by Gender],
FirstName, Age, Gender FROM Person
Partition by Gender FirstName Age Gender
-------------------- ---------- ----------- ------
1 Doris 6 F
2 Mary 11 F
2 Sherry 11 F
4 Sue 29 F
1 Larry 5 M
2 George 6 M
3 Sam 17 M
4 Ted 23 M
4 Marty 23 M
6 Frank 38 M
7 John 40 M
성별 별로 그룹 을 나 눈 것 을 볼 수 있 습 니 다. 성별 별로 그룹 을 나 누 면 rank () 함수 3. DENSE RANK () 함수 가 계속 사 용 됩 니 다. SELECT DENSE_RANK() OVER (ORDER BY Age) AS [Dense Rank by Age], FirstName, Age FROM Person 출력 결과: Dense Rank by Age FirstName Age-------------------- ---------- -----------1 Larry 52 Doris 62 George 63 Mary 113 Sherry 114 Sam 175 Ted 235 Marty 236 Sue 297 Frank 388 John 40. 보이 시 나 요? rank 함수 와 차이 점 은 순 서 는 항상 연속 입 니 다. Doris 와 George 는 같은 해 에 모두 2 위 를 차 지 했 지만 그 후의 mary 는 rank 함수 처럼 4 위 가 아니 라 3 위 를 차 지 했 습 니 다. 4. ntile () 함수 SELECT FirstName, Age, NTILE (3) OVER (ORDER BY Age) AS [Age Groups]FROM Person
출력 결과: First Name Age Age Groups---------- ----------- --------------------Larry 5 1Doris 6 1George 6 1Mary 11 1Sherry 11 2Sam 17 2Ted 23 2Marty 23 2Sue 29 3Frank 38 3John 40 3. 이 함 수 는 ntile (n) 의 N 에 따라 기록 을 몇 단락 으로 나 누 었 습 니까? 11 개의 기록 은 현재 3 단 으로 나 뉘 었 습 니 다. lary 에서 mary 까지 는 1 단 이 고 Sherry 에서 maty 까지 는 2 단 이 며 sue 에서 john 까지 는 3 단 입 니 다.