본문 바로가기
IT/SQL 기초강좌 (PostgreSQL)

84강 SQL 함수 정리 : PostgreSQL RANK Function

by DoitSQL 2023. 1. 26.
728x90

PostgreSQL 기초강의, PostgreSQL 기초강좌, RANK

84강 SQL 함수 정리 : PostgreSQL RANK Function   

 

SQL 함수 정리 84강 시작합니다.

 

이번 시간에는

 PostgreSQL RANK Function

에 대해서 알아보는 시간입니다.

 

이번 시간에는 PostgreSQL RANK() 함수를 사용하여 결과 집합의 모든 행에 순위를 할당하는 방법을 배웁니다.


PostgreSQL RANK() 함수 소개   

RANK() 함수는 결과 집합의 파티션 내의 모든 행에 순위를 할당합니다.

각 파티션에서 첫 번째 행의 순위는 1입니다. RANK() 함수는 동점자 수를 동점자 순위에 추가하여 다음 행의 순위를 계산하므로 순위가 순차적이지 않을 수 있습니다. 또한 값이 동일한 행은 동일한 순위를 가집니다.

다음은 RANK() 함수의 구문을 보여줍니다:

RANK() OVER (
    [PARTITION BY partition_expression,... ]
    ORDER BY sort_expression [ASC | DESC],...

위 구문에서:

  • 먼저 PARTITION BY 절은 결과 집합의 행을 RANK() 함수가 적용되는 파티션으로 분배합니다.
  • 그런 다음 ORDER BY 절은 함수가 적용되는 각 파티션의 행 순서를 지정합니다.

RANK() 함수는 상위 N개 및 하위 N개 보고서를 생성하는 데 유용할 수 있습니다.


PostgreSQL RANK() 함수 데모   

먼저 열이 하나 포함된 ranks라는 새 테이블을 생성합니다:

CREATE TABLE ranks (
     c VARCHAR(10)
);  

 

둘째, ranks  테이블에 일부 행을 삽입합니다:

INSERT INTO ranks(c)
VALUES('A'), ('A'), ('B'), ('B'), ('B'), ('C'), ('E');  

 

셋째, ranks  테이블에서 데이터를 쿼리 합니다:

SELECT 
     c
FROM
     ranks; 

결과

넷째, RANK() 함수를 사용하여 결과 순위 테이블의 행에 순위를 할당합니다:

SELECT
     c,
     RANK () OVER ( 
          ORDER BY c 
     ) rank_number 
FROM
     ranks; 

결과

출력에서 명확하게 알 수 있듯이:

  • 첫 번째 행과 두 번째 행은 A 값이 동일하기 때문에 동일한 순위를 받습니다.
  • 세 번째, 네 번째 및 다섯 번째 행은 RANK() 함수가 랭크 2를 건너뛰고 모든 행이 동일한 B 값을 가지기 때문에 랭크 3을 받습니다.

앞서 배운 ROW_NUMBER()와의 차이가 이해되시죠.


PostgreSQL RANK() 함수 예제   

products  테이블을 사용하여 RANK() 기능을 시연합니다:

시연 테이블

이 그림은 products  테이블의 데이터를 보여줍니다:

제품 테이블

 

1) 전체 결과 집합에 대해 PostgreSQL RANK() 함수 사용   

이 예에서는 RANK() 함수를 사용하여 가격별로 각 제품에 순위를 할당합니다:

SELECT
     product_id,
     product_name,
     price,
     RANK () OVER ( 
          ORDER BY price DESC
     ) price_rank 
FROM
     products;  

결과

이 예에서는 PARTITION BY 절을 생략했기 때문에 RANK() 함수는 전체 결과 집합을 단일 파티션으로 처리했습니다.

RANK() 함수는 높은 값에서 낮은 값으로 정렬된 전체 결과 집합 내의 각 행에 대한 순위를 계산했습니다.


2) PARTITION BY 절 예제와 함께 PostgreSQL RANK() 함수 사용   

다음 예제에서는 RANK() 함수를 사용하여 각 제품 그룹의 모든 제품에 순위를 할당합니다:

SELECT
     product_id,
     product_name,
     group_name,
     price,
     RANK () OVER ( 
          PARTITION BY p.group_id
          ORDER BY price DESC
     ) price_rank 
FROM
     products p
     INNER JOIN product_groups g 
          ON g.group_id = p.group_id; 

결과

이 예에서는 다음을 수행합니다:

  • 먼저 PARTITION BY 절은 제품을 제품 그룹 ID(group_id) 별로 그룹화된 파티션으로 배포합니다.
  • 둘째, ORDER BY 조항은 각 파티션의 제품을 높은 가격에서 낮은 가격으로 정렬합니다. 

RANK() 기능은 각 제품군의 모든 제품에 적용되었으며 제품군이 변경되면 다시 초기화됩니다.


이번 강의에서는 PostgreSQL RANK() 함수를 사용하여 결과 집합의 파티션에 있는 모든 행의 순위를 계산하는 방법에 대해 배웠습니다.

 

감사합니다.


본 강의는 PostgreSQL Tutorial을 참조합니다.  https://www.postgresqltutorial.com/
Do it! SQL을 찾아 주셔서 감사합니다. 공감 ♥ , 댓글이 큰 힘이 됩니다.

 

728x90

댓글