'SQL'에 해당되는 글 36건

  1. 2009.10.24 SQL Server 2005 TSQL - 2. Ranking 함수

 

Ranking 함수의 종류
RANK()
DENSE_RANK()
NTILE(<expression>)
ROW_NUMBER()
집계 작업에 사용 가능
사용자 정의 함수와 함께 사용 가능

 

함수 설명
RANK-- 결과 집합의 각 행에 대하여 지정된 파티션 내에서 정렬 기준에 의거하여 등급을 부여하는 함수
DENSE_RANK-- 결과 집합의 각 행에 대하여 지정된 파티션 내에서 정렬 기준에 의거하여 연속적인 등급을 반환하는 함수
ROW_NUMBER --결과 집합의 각 행에 대하여 행의 위치 번호를 반환하는 함수
NTILE (n) --결과 집합의 각 파티션에 있는 행들을 지정한 개수만큼의 그룹으로 쪼개어 등급을 부여하는 함수


 

Ranking 함수 예: 데이터 분석

예:
 SELECT
  RANK() OVER(ORDER BY City) AS RANK,
  RANK() OVER(PARTITION BY City ORDER BY LastName) AS PART_RANK,
  DENSE_RANK() OVER(ORDER BY City) AS DENSE_RANK,
  ROW_NUMBER() OVER(ORDER BY City) AS ROW_NUM,
  NTILE(4) OVER(ORDER BY City) AS NTILE_4,
  LastName,
  FirstName,
  City
 FROM Employees
 ORDER BY City, LastName


OVER 절:
  파티션 방식 제공
  결과 집합의 행들을 정렬

 

RANK PART_RANK DENSE_RANK ROW_NUMBER NTILE_4

1             1                   1               1                    1           Leverling      Janet       Kirkland
2             1                   2               2                    1           Buchanan    Steven     London
2             2                   2               5                    2           Dodsworth    Anne       London
2             3                   2               4                    2           King             Robert     London
2             4                   2               3                    1           Suyama       Michael    London
6             1                   3               6                    3           Peacock     Margaret   Redmond
7             1                   4               8                    4           Callahan     Laura       Seattle
7             2                   4               7                    3           Davolio      Nancy       Seattle
9             1                   5               9                    4           Fuller        Andrew      Tacoma
 


 

Ranking 함수 예:페이징

예: 50에서 60까지의 주문 정보를 일자순으로 정렬
 
 WITH OrderedOrders AS
 (select SalesOrderID,
      OrderDate,
            Row_Number() OVER (order by OrderDate) AS RN 
 from SalesOrderHeader)
 SELECT * from OrderedOrders
 WHERE RN between 50 and 60



Posted by 펀펀