MS-SQL Server 2005부터 서포트 합니다.
온라인 게임의 통계등에 많이 사용하는 순위나 랭킹 서비스에 많이 활용하는 함수입니다.
USE AdventureWorks;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity
,RANK() OVER
(PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS 'RANK'
FROM Production.ProductInventory i
INNER JOIN Production.Product p
ON i.ProductID = p.ProductID
ORDER BY p.Name;
GO
여기서 위의 예제처럼 Partition By 로 필드를 구분 지으면 지역별(i.LocationID)로 랭킹을 나눈다는 뜻이다. 서울, 부산의 두 지역이 있으면 서울에서의 랭킹과 부산에서의 랭킹이 서로 다르게 나타난다.
Parition 뒤의 Order By 는 Rank를 순서짓는 순서가 된다.
즉, 온라인 게임에서 많이 사용하는 캐릭터 테이블에서..
서버별, 직업별로 높은 레벨, 높은 경험치, 신규 캐릭터 순으로 랭킹을 만들어보면..
테이블 : tCharacter
서버 : servername
직업 : jobname
레벨 : level
경험치 : exppoint
생성일 : regdt
select servername, jobname, level, exppoint, regdt
, rank() over
(partition by servername, jobname
order by level desc, exppoint desc, regdt desc) as Rank
from tCharacter
이런식으로 구별지어 랭킹을 만들 수 있답니다. ^^
http://msdn.microsoft.com/ja-jp/library/ms176102.aspx
온라인 게임의 통계등에 많이 사용하는 순위나 랭킹 서비스에 많이 활용하는 함수입니다.
USE AdventureWorks;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity
,RANK() OVER
(PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS 'RANK'
FROM Production.ProductInventory i
INNER JOIN Production.Product p
ON i.ProductID = p.ProductID
ORDER BY p.Name;
GO
여기서 위의 예제처럼 Partition By 로 필드를 구분 지으면 지역별(i.LocationID)로 랭킹을 나눈다는 뜻이다. 서울, 부산의 두 지역이 있으면 서울에서의 랭킹과 부산에서의 랭킹이 서로 다르게 나타난다.
Parition 뒤의 Order By 는 Rank를 순서짓는 순서가 된다.
즉, 온라인 게임에서 많이 사용하는 캐릭터 테이블에서..
서버별, 직업별로 높은 레벨, 높은 경험치, 신규 캐릭터 순으로 랭킹을 만들어보면..
테이블 : tCharacter
서버 : servername
직업 : jobname
레벨 : level
경험치 : exppoint
생성일 : regdt
select servername, jobname, level, exppoint, regdt
, rank() over
(partition by servername, jobname
order by level desc, exppoint desc, regdt desc) as Rank
from tCharacter
이런식으로 구별지어 랭킹을 만들 수 있답니다. ^^
http://msdn.microsoft.com/ja-jp/library/ms176102.aspx
댓글
댓글 쓰기