SQLShack (한국어)

우리가 계산을 수행하는 데이터를 사용하여 다양한 집계와 같은 기능을 Max,Min,AVG. 이러한 함수를 사용하여 단일 출력 행을 얻습니다. SQL Sever 는 분류에 따라 개별 필드의 순위를 지정하는 SQL 순위 함수를 제공합니다. 참여하는 각 행에 대해 집계 된 값을 반환합니다. SQL 순위 함수는 창 함수로도 알고 있습니다.

  • 참고:이 Windows 용어는 Microsoft Windows 운영 체제와 관련이 없습니다., 이들은 SQL 순위 함수입니다.

우리는 다음과 같은 순위 기능을 가지고 있습니다.

  • 그룹()
  • 순위()
  • DENSE_RANK()
  • NTILE()

에서 SQL 순위 기능은,우리가 사용하는 이상()절의 정의를 행 결과를 설정합니다. Sql PARTITION BY 절 을 사용하여 파티션의 데이터 하위 집합을 정의 할 수도 있습니다. Order by 절을 사용하여 결과를 내림차순 또는 오름차순으로 정렬 할 수도 있습니다.

이러한 SQL 순위 함수를 탐색하기 전에 샘플 데이터를 준비하겠습니다., 이 샘플 데이터에는 수학,과학 및 영어 과목의 3 명의 학생에 대한 시험 결과가 있습니다.

ExamResult 테이블에 다음 샘플 데이터가 있습니다.

다가오는 예제에서 각 SQL 순위 함수를 사용합시다.

그룹()SQL 순위 기능

우리가 사용하여 그룹()SQL 순위를 얻을 수있는 기능을 독특한 순번 대한 각각의 행에서 지정한 데이터이다. 첫 번째 행에 대해 하나씩 순위를 부여한 다음 각 행에 대해 하나씩 값을 증가시킵니다. 우리는 비슷한 값을 갖는 행에 대해 다른 순위를 얻습니다.,

다음 쿼리를 실행하여 마크에 따라 학생의 순위를 얻습니다.,

1
2
3
4
5

SELECT Studentname,
Subject,
Marks,
ROW_NUMBER() OVER(ORDER BY Marks) RowNumber
FROM ExamResult;

By default, it sorts the data in ascending order and starts assigning ranks for each row., 위의 스크린 샷에서 마크 50 에 대한 행 번호 1 을 얻습니다.

우리는 Order By 절과 함께 내림차순을 지정할 수 있으며 그에 따라 순위를 변경합니다.,ae”>

1
2
3
4
5

SELECT Studentname,
Subject,
Marks,
ROW_NUMBER() OVER(ORDER BY Marks desc) RowNumber
FROM ExamResult;

RANK() SQL RANK Function

We use RANK() SQL Rank function to specify rank for each row in the result set., 우리는 세 과목에 대한 학생 결과가 있습니다. 우리는 과목에서 자신의 마크에 따라 학생들의 결과를 순위를 매기고 싶습니다. 예를 들어,다음 화면에서,학생 이사벨은 가장 높은 점수를 얻었는 영어 주고 가장 낮은 표에서 수학의 주제입니다. 마크에 따라 이사벨라는 영어에서 1 위를,수학 과목에서 3 위를 얻습니다.

다음 쿼리를 실행하는 이 결과를 얻을 설정합니다.,v id=”c5a1f1b829″>

1
2
3
4
5
6
7

SELECT Studentname,
Subject,
Marks,
RANK() OVER(PARTITION BY Studentname ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Studentname,
Rank;

Let’s execute the following query of SQL Rank function and look at the result set., 이 쿼리에서는 데이터를 더 작은 하위 집합으로 나누기 위해 sql PARTITION By 절으로 지정하지 않았습니다. 우리는 Marks 절에 over 절이있는 SQL Rank 함수를 사용하여(내림차순으로)각 행에 대한 순위를 얻습니다.,div id=”7d9d5b54ae”>

1
2
3
4
5
6

SELECT Studentname,
Subject,
Marks,
RANK() OVER(ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Rank;

In the output, we can see each student get rank as per their marks irrespective of the specific subject., 예를 들어,전체 결과 집합에서 가장 높은 표시와 가장 낮은 표시는 각각 90 과 50 입니다. 결과 집합에서 가장 높은 마크는 순위 1 을 얻고 가장 낮은 마크는 순위 9 를 얻습니다.

두 명의 학생이 동일한 마크를 얻으면(우리의 예에서는 행 번호 4 와 5),그들의 계급도 동일합니다.

DENSE_RANK()SQL 순위 기능

우리가 사용하는 DENSE_RANK()함수를 지정하는 고유 번호 순위 내에서 파티션으로 지정된 열의 값입니다. 작은 차이가있는 순위 함수와 비슷합니다.,

sql RANK 함수 Dense_rank()에서 중복 값이있는 경우 SQL 도 해당 행에 다른 순위를 할당합니다. 이상적으로는 중복되거나 유사한 값에 대해 동일한 순위를 얻어야합니다.

DENSE_RANK()함수로 다음 쿼리를 실행해 보겠습니다.,

1
2
3
4
5
6
선택 Studentname,
대상,
마크
DENSE_RANK()이상(주문에 의해 표시 DESC)Rank
에서 ExamResult
순위

출력에서,당신은 당신이 볼 수있는 우리는 같은 계급에 대한 모두 릴리 및 이사벨을 획득 70 니다.,

sql PARTITION BY 절과 함께 DENSE_RANK 함수를 사용합시다.,v id=”2d0aafc924″>

1
2
3
4
5
6
7
선택 Studentname,
대상,
마크
DENSE_RANK()이상(파티션을 제목별 주문에 의해 표시 DESC)Rank
에서 ExamResult
ORDER BY Studentname,
순위

우리가 하지 않아 두 개의 학생들과 유사한 표시므로 결과과 비슷한 설정 순위에서 함수 이 경우입니다.,

자 업데이트 학생을 마크는 다음과 같은 쿼리 쿼리를 다시 실행해보십시오.

1
업데이트 Examresult 설정한 표=70 는 Studentname=’이사벨라’그리고 피사체=’학’

우리는 것을 볼 수 있습에서 학생을 그룹 이사벨은있어 유사한 자국에서 수학과 과학을 주제입니다., 계급은이 경우 두 과목 모두에 대해서도 동일합니다.

참조하자 사이의 차이를 계급()및 DENSE_RANK()SQL 순위 기능은 다음과 같은 쿼리가 있습니다.,b829″>

1
2
3
4
5
6
7
선택 Studentname,
대상,
마크
DENSE_RANK()이상(파티션에 의해 StudentName 순서에 의해 표시)Rank
에서 ExamResult
ORDER BY Studentname,
순위

출력에서,당신이 볼 수있는 격차 계급에서 출력 기능 내에서 파티션이 있습니다., 우리는 DENSE_RANK 함수에 갭이 없습니다.

다음 화면에서,당신이 볼 수있는 이사벨라 비슷한에서 숫자 두 과목입니다. 순위 함수는 유사한 값에 대해 순위 1 을 할당하지만 내부적으로 순위 2 를 무시하고 다음 행은 순위 3 을 얻습니다.

Dense_Rank 함수에서 순위를 유지하고 값에 대한 갭을 제공하지 않습니다.

NTILE(N)SQL 순위 기능

우리가 사용하는 NTILE(N)함수를 배포하의 행 수를 지정(N)숫자의 그룹입니다., 각 행 그룹은 지정된 조건에 따라 순위를 가져옵니다. 원하는 그룹 수에 대한 값을 지정해야합니다.

내 예에서는 ExamResult 테이블에 9 개의 레코드가 있습니다. NTILE(2)는 결과에 두 개의 레코드 그룹이 필요하다는 것을 보여줍니다.,

1
2
3
4
5

SELECT *,
NTILE(2) OVER(
ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY rank;

In the output, we can see two groups. Group 1 contains five rows, and Group 2 contains four rows.,

마찬가지로,NTILE(3)나누는 행의 수를 세 개의 그룹이 있다고 기록에 각각의 그룹입니다.,

1
2
3
4
5

SELECT *,
NTILE(3) OVER(
ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY rank;

We can use SQL PARTITION BY clause to have more than one partition., 다음 쿼리에서 피사체의 각 파티션은 두 그룹으로 나뉩니다.,

1
2
3
4

SELECT *,
NTILE(2) OVER(PARTITION BY subject ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY subject, rank;

Practical usage of SQL RANK functions

We can use SQL RANK function to fetch specific rows from the data., 1 등급에서 3 등급까지 학생들의 데이터를 얻고 싶다고 가정 해보십시오. 다음 쿼리에서,우리가 사용하는 일반적인 테이블에 표현(CTE)데이터를 얻을 수 있을 사용하여 그룹()함수와는 나중에 필터링에서 결과 CTE 을 만족시키는 우리의 조건입니다.,d>

와 StudentRanks 로
(
선택*,그룹()이상(주문에 의해 표시)으로 순위
에서 ExamResult
)
선택 StudentName, 표
에서 StudentRanks
는 순위를>=1 순위<=3
순서에 의해 순위

우리가 사용할 수 있는 오프셋을 가져오는 명령의 시작에서 SQL Server2012 를 가져오의 특정 번호를 기록합니다.,v id=”0fa57edc44″>

와 StudentRanks 로
(
선택*,그룹()이상(주문에 의해 표시)으로 순위
에서 ExamResult
)
선택 StudentName, 표
에서 StudentRanks
ORDER BY 대열에 오프셋 1 개의 행이 가져올 다음 3 개의 행만

빠른 요약의 SQL 순위 기능

그룹

할당 순차 순위를 각각의 고유한 기록합니다.,

RANK

파티션의 각 행에 순위 번호를 할당합니다. 비슷한 값을 위해 숫자를 건너 뜁니다.

Dense_RANK

할당 순위 번호를 각각의 행에는 파티션입니다. 비슷한 값에 대해서는 숫자를 건너 뛰지 않습니다.

NTILE(N)

나누는 행의 수를 따라 지정된 파티션을 할당합니다 독특한 값에는 파티션입니다.,

결론

이 문서에서,우리는 탐험 SQL 순위 기능과 차이를 이러한 기능입니다. Sql 개발자가 이러한 기능을 잘 알고 데이터를 잘 탐색하고 관리하는 것이 유용합니다. 의견이나 질문이 있으시면 아래 의견에 남겨 주시기 바랍니다.,

  • 저자
  • 최근 게시글
로 MCSA 인증 및 마이크로소프트에 의하여 증명된 트레이너 Gurgaon,인도,13 년의 경험,라젠드라 작동을 위한 다양한 대기업에 초점을 맞추고 성능을 최적화,모니터,높은 가용성 및 재난 복구 전략을 구현합니다., 그는 저자의 수백명의 신뢰할 수 있는 기사에 SQL Server,Azure,MySQL,Linux,Power BI,성능 튜닝,AWS/Amazon RDS,Git 및 관련 기술되어있는 보 10m 독자니다.
그는 창조주 하나의 가장 큰 무료 온라인 컬렉션에 기사의 단일 주제,함께 그의 50 부통령인 아네트 시우-리 SQL 서버에 항상 가용성 그룹이 있습니다. 에 따라 자신의 기여하는 SQL Server 커뮤니티,그로 인정을 받고있는 다양한 상을 포함한”최고의 저자는”올해 지속적으로 2020 년과 2021 년에서 SQLShack.,
라이에 항상 관심 새로운 도전은 그렇다면 상담이 필요하신 데 도움이 어떤 주제에 덮여 그의 저술에서 도달할 수 있는 라젠드라.gupta16@gmail.,com
모두 보기 게시물에 의해 라젠드라 Gupta
최근 게시물에 의해 라젠드라 굽타(조)
  • 수행하는 크고 작은 버전의 업그레이드 AWS RDS SQL Server 월 29 일 2021
  • 배포 AWS RDS PostgreSQL 인스턴스-January27,2021
  • 마이그레이션내에 SQL 데이터베이스 AWS RDS SQL 사용하여 서버 AWS DMS-January25,2021

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다