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

85강 SQL 함수 정리 : PostgreSQL DENSE_RANK Function

by DoitSQL 2023. 1. 27.
728x90

PostgreSQL 기초강의, PostgreSQL 기초강좌

85강 SQL 함수 정리 : PostgreSQL DENSE_RANK Function   

 

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

 

이번 시간에는

 PostgreSQL DENSE_RANK Function

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

 

이번 시간에는 PostgreSQL DENSE_RANK() 함수를 사용하여 결과 집합의 파티션 내의 각 행에 순위 값에 공백이 없는 순위를 할당하는 방법을 배우게 됩니다.


PostgreSQL DENSE_RANK() 함수 기능 소개   

DENSE_RANK()는 결과 집합의 각 파티션에 있는 모든 행에 순위를 할당합니다. RANK() 함수와 달리 DENSE_RANK() 함수는 항상 연속된 순위 값을 반환합니다.

각 파티션에 대해 DENSE_RANK() 함수는 값이 동일한 행에 대해 동일한 순위를 반환합니다

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

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

DENSE_RANK() 함수는 PARTITION BY 절에 의해 정의된 각 파티션의 모든 행에 ORDER BY 절에 의해 지정된 정렬 순서로 적용됩니다. 파티션 경계를 넘을 때 순위가 재설정됩니다.

PARITION BY 절은 선택 사항입니다. 이를 건너뛰면 DENSE_RANK() 함수가 전체 결과 집합을 단일 파티션으로 처리합니다.


PostgreSQL DENSE_RANK() 함수 데모   

먼저 dense_ranks라는 이름의 열이 하나인 테이블을 만듭니다:

CREATE TABLE dense_ranks (
     c VARCHAR(10)
); 

 

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

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

 

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

SELECT c from dense_ranks; 

dense_ranks 테이블

넷째, DENSE_RANK() 함수를 사용하여 결과 집합의 각 행에 순위를 할당합니다:

SELECT
     c,
     DENSE_RANK() OVER (
          ORDER BY c
     ) dense_rank_number
FROM
     dense_ranks; 

결과

RANK() 함수와의 차이를 확인하셨나요? RANK 순위가 연속됩니다.


PostgreSQL DENSE_RANK() 함수 예제   

우리는 products  테이블을 사용하여 DENSE_RANK() 함수를 시연합니다.

시연테이블
시연테이블


1) 결과 집합 예제에 대해 PostgreSQL DENSE_RANK() 함수 사용   

이 문은 DENSE_RANK() 함수를 사용하여 제품의 순위를 가격으로 매긴다:

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

결과

이 예에서는 PARTITION BY 절을 건너뛰었으므로 DENSE_RANK() 함수는 전체 결과 집합을 단일 파티션으로 처리했습니다.

DENSE_RANK() 함수는 ORDER BY 절에서 지정한 높은 가격 순서에서 낮은 가격 순서를 기준으로 각 제품에 순위를 할당했습니다.


2) 파티션사용 PostgreSQL DENSE_RANK() 함수 사용 예제   

다음 예제에서는 각 제품 그룹의 모든 제품에 순위를 할당합니다:

SELECT
     product_id,
     product_name,
     group_id,
     price,
     DENSE_RANK () OVER ( 
          PARTITION BY group_id
          ORDER BY price DESC
     ) price_rank 
FROM
     products; 

결과

이 예에서 PARTITION BY 절은 제품을 제품 그룹으로 배포했습니다. ORDER BY 절은 DENSE_RANK() 함수가 적용되는 각 그룹의 제품을 높은 가격에서 낮은 가격으로 정렬합니다.


3) CTE 예제와 함께 PostgreSQL DENSE_RANK() 함수 사용   

다음 문은 CTE와 함께 DENSE_RANK() 함수를 사용하여 각 제품 그룹에서 가장 비싼 제품을 반환합니다:

WITH cte AS(
     SELECT
          product_id,
          product_name,
          group_id,
          price,
          DENSE_RANK () OVER ( 
               PARTITION BY group_id
               ORDER BY price DESC
          ) price_rank 
     FROM
          products

SELECT 
     product_id, 
     product_name, 
     price
FROM 
     cte
WHERE 
     price_rank = 1; 

결과


이번 강의에서는 PostgreSQL DENSE_RANK() function를 사용하여 결과 집합의 파티션 내에서 각 행에 대한 순위를 계산하는 방법에 대해 배웠습니다.

 

감사합니다.


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

 

728x90

댓글