logo

SQL Server의 RANK 함수

SQL Server의 RANK 함수는 일종의 순위 함수입니다. 이 기능은 출력 파티션 내의 각 행에 번호를 할당합니다. . 각 행에 이전 행 순위에 1을 더한 순위를 할당합니다. RANK 함수는 동일한 파티션 내에서 동일한 두 값을 찾으면 해당 값에 동일한 순위 번호를 할당합니다. 또한, 순위의 다음 숫자는 이전 순위에 중복된 숫자를 더한 숫자가 됩니다. 따라서 이 함수는 항상 연속된 순서로 행의 순위를 지정하지 않습니다.

Java에서 문자열을 int로 변환하는 방법

RANK 함수는 창 함수의 하위 부분이기도 합니다. 이 기능을 사용할 때 다음 사항을 기억해야 합니다. :

  • 항상 OVER() 절과 함께 작동합니다.
  • ORDER BY 절을 기반으로 각 행에 순위를 할당합니다.
  • 연속된 순서로 각 행에 순위를 할당합니다.
  • 각 새 파티션에 대해 순위를 하나씩 시작하여 항상 행에 순위를 할당합니다.

참고: 순위는 쿼리가 실행될 때 파티션 내의 행에 임시 값을 할당합니다.

SQL Server는 다음과 같은 순위 함수를 제공합니다. :

  • 계급()
  • ROW_NUMBER()
  • 밀도_순위()
  • 엔타일()

각 순위 함수를 자세히 알아보겠습니다. 먼저 이러한 모든 기능을 시연하기 위한 테이블을 만듭니다. 다음 문은 다음과 같은 테이블을 생성합니다. rank_demo 세 개의 열이 있습니다.

 CREATE TABLE rank_demo ( first_name VARCHAR(60), last_name VARCHAR(40), city VARCHAR(30) ); 

다음으로, 아래와 같이 이 테이블에 일부 행을 삽입합니다.

 INSERT INTO rank_demo (first_name, last_name, city) VALUES ('Luisa', 'Evans', 'Texas'), ('Paul', 'Ward', 'Alaska'), ('Peter', 'Bennett', 'California'), ('Carlos', 'Patterson', 'New York'), ('Rose', 'Huges', 'Florida'), ('Marielia', 'Simmons', 'Texas'), ('Antonio', 'Butler', 'New York'), ('Diego', 'Cox', 'California'); 

SELECT 문을 사용하여 테이블을 확인할 수 있습니다. 아래 출력이 표시됩니다.

SQL Server의 RANK 함수

순위() 함수

이 함수는 결과 집합의 각 행에 대한 순위를 결정하는 데 사용됩니다. 다음 구문은 SQL Server의 RANK 함수 사용을 보여줍니다.

 SELECT column_name RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

이 구문에서는

  • 그만큼 OVER 절 관련 창 기능이 적용되기 전에 결과의 분할 및 순서를 설정합니다.
  • 그만큼 PARTITION BY 절 FROM 절에 의해 생성된 출력을 파티션으로 나눕니다. 그런 다음 함수는 각 파티션에 적용되고 분할 경계가 파티션을 넘을 때 다시 초기화됩니다. 이 절을 정의하지 않은 경우 함수는 모든 행을 단일 파티션으로 처리합니다.
  • 그만큼 주문 함수가 적용되기 전에 하나 이상의 컬럼 이름을 기준으로 행의 순서를 내림차순 또는 오름차순으로 결정하는 필수 절입니다.

SQL Server에서 RANK() 함수가 어떻게 작동하는지 살펴보겠습니다. 아래 명령문은 순위 함수를 사용하여 각 행에 번호 매기기를 할당합니다.

 SELECT first_name, last_name, city, RANK () OVER (ORDER BY city) AS Rank_No FROM rank_demo; 

저희는 이용하지 않았기 때문에 PARTITION BY 절 , 함수는 전체 결과를 단일 파티션으로 처리했습니다. 명령문을 실행하면 아래 출력이 표시됩니다.

SQL Server의 RANK 함수

이 출력에서 ​​일부 행은 동일한 값을 갖기 때문에 동일한 순위를 얻는다는 것을 알 수 있습니다. 도시 기둥 . 그리고 순위의 다음 숫자는 이전 순위에 중복 숫자 수를 더한 값이 됩니다.

다음 진술은 다른 예시 여기서 우리는 다음을 기준으로 행을 나누는 partition by 절을 사용할 것입니다. 도시 열을 선택하고 파티션 내의 각 행에 순위를 할당합니다. 출력 순서는 다음을 기준으로 합니다. 이름 :

 SELECT first_name, last_name, city, RANK () OVER (PARTITION BY city ORDER BY first_name) AS Rank_No FROM rank_demo; 

아래 출력이 표시됩니다.

SQL Server의 RANK 함수

ROW_NUMBER() 함수

이 기능은 다음과 같은 용도로 사용됩니다. 각 행의 고유한 일련 번호를 반환합니다. 파티션 내에서. 행 번호 지정은 1부터 시작하여 파티션의 총 행 수에 도달할 때까지 1씩 증가합니다. RANK() 함수와 다른 유사한 값을 가진 행에 대해 다른 순위를 반환합니다.

내 컴퓨터 화면 크기는 얼마야

아래 구문은 SQL Server의 ROW_NUMBER() 함수 사용을 보여줍니다.

 SELECT column_name ROW_NUMBER() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

다음 쿼리를 실행하여 각 행에 시퀀스 번호를 할당합니다.

 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

그것은 그들의 테이블에 따라 순위를 할당합니다 도시 . 여기서는 동일한 도시 값을 가진 행에 대해 서로 다른 순위를 할당하는 것을 볼 수 있습니다.

SQL Server의 RANK 함수

정렬 순서를 변경하면 오름차순으로 내림차순 ORDER BY 절을 사용하면 이 함수는 그에 따라 RANK도 변경합니다. 아래 설명을 참조하세요.

 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city DESC) AS my_rank FROM rank_demo; 

결과는 다음과 같습니다.

SQL Server의 RANK 함수

DENSE_RANK() 함수

이 기능은 할당합니다 파티션 내 각 행의 고유한 순위 공백 없이 지정된 열 값에 따라. 항상 연속된 순서로 순위를 지정합니다. 우리가 얻는다면 중복된 값 , 이 함수는 동일한 순위로 할당하고 다음 순위는 다음 일련 번호가 됩니다. 이 특성은 DENSE_RANK() 함수와 RANK() 함수와 다릅니다.

아래 구문은 SQL Server의 DENSE_RANK() 함수 사용을 보여줍니다.

 SELECT column_name DENSE_RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

다음 쿼리는 DENSE_RANK() 함수를 사용하여 각 행에 순위 번호를 할당합니다.

 SELECT first_name, last_name, city, DENSE_RANK() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

중복 값의 순위가 동일하고 다음 순위가 다음 일련 번호가 되는 것을 확인할 수 있는 아래 출력을 반환합니다.

SQL Server의 RANK 함수

PARTITION BY 절을 사용한 DENSE_RANK() 함수의 또 다른 예입니다. 이 절은 도시 열을 기준으로 행을 나누고 결과 집합의 순서는 first_name을 기준으로 합니다.

개발자 모드를 닫는 방법
 SELECT first_name, last_name, city, DENSE_RANK() OVER(PARTITION BY city ORDER BY first_name) AS my_rank FROM rank_demo; 

두 이름이 동일하지 않기 때문에 아래 출력을 얻게 됩니다. 이 경우 출력은 RANK() 함수와 유사합니다.

SQL Server의 RANK 함수

다음 쿼리를 사용하여 이름을 업데이트해 보겠습니다.

반응형 지도
 Update rank_demo set first_name = 'Diego' WHERE city = 'California' 

이제 동일한 쿼리를 다시 실행합니다. 우리는 이 테이블이 동일한 이름을 가지고 있음을 볼 것입니다. 캘리포니아 시티 . 따라서 순위도 두 이름 모두 동일합니다.

SQL Server의 RANK 함수

NTILE(N) 함수

이 기능은 다음과 같은 용도로 사용됩니다. 정렬된 파티션의 행을 미리 정의된 숫자로 분배 (N) 거의 동일한 그룹입니다. 각 행 그룹은 정의된 조건에 따라 순위를 얻고 한 그룹부터 번호를 매기기 시작합니다. 이는 버킷 번호 속한 그룹을 나타내는 그룹의 모든 행에 대해.

다음 구문은 SQL Server의 NTILE() 함수 사용을 보여줍니다.

 SELECT column_name NTILE(N) OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

다음 쿼리는 NTILE() 함수를 사용하여 각 행에 순위 번호를 할당합니다.

 SELECT first_name, last_name, city, NTILE(3) OVER(ORDER BY city) AS my_rank FROM rank_demo; 

지정된 테이블에는 여덟 개의 레코드 . 그러므로, 엔타일(3) 결과 세트에 세 개의 레코드 그룹 . 명령문을 실행하면 아래 출력이 표시됩니다.

SQL Server의 RANK 함수

이 문서에서는 다양한 예제를 통해 SQL Server에서 사용되는 모든 RANK 함수를 설명합니다. 또한 이러한 기능 간의 주요 차이점도 보여줍니다. 이러한 기능은 개발자가 데이터를 잘 탐색하고 관리하는 데 매우 유용합니다.