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_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을 찾아 주셔서 감사합니다. 공감 ♥ , 댓글이 큰 힘이 됩니다. |
'IT > SQL 기초강좌 (PostgreSQL)' 카테고리의 다른 글
87강 SQL 함수 정리 : PostgreSQL PERCENT_RANK Function (117) | 2023.01.29 |
---|---|
86강 SQL 함수 정리 : PostgreSQL CUME_DIST Function (60) | 2023.01.28 |
84강 SQL 함수 정리 : PostgreSQL RANK Function (97) | 2023.01.26 |
83강 SQL 함수 정리 : PostgreSQL ROW_NUMBER Function (149) | 2023.01.26 |
82강 SQL 함수 정리 : PostgreSQL Window Functions (122) | 2023.01.25 |
댓글