Postgres 순위

Postgres Sun Wi



PostgreSQL에서 rank() 함수는 지정된 정렬 기준에 따라 결과 집합 내의 각 행에 순위를 할당할 수 있는 Window 함수입니다. 대부분의 창 함수와 마찬가지로 순위 함수는 지정된 결과 집합에서 행의 순위를 결정하는 것과 같은 분석 쿼리에 유용합니다.

이 자습서에서는 PostgreSQL 함수로 작업하는 방법을 살펴봅니다. 또한 함수 구문과 매개변수를 탐색하고 몇 가지 실용적인 예를 살펴봅니다.

PostgreSQL Rank() 함수

다음은 PostgreSQL에서 rank() 함수의 구문을 보여줍니다.







RANK() OVER (PARTITION BY 파티션 표현식 ORDER BY 정렬 표현식 [ASC|DESC])

rank() 함수를 호출하여 시작합니다. 그런 다음 OVER 키워드를 사용하여 창 기능 작업을 수행하고자 함을 나타냅니다.



다음은 PARTITION BY partition_expression입니다. 이 절은 주어진 표현식을 기반으로 행을 다양한 파티션으로 나눕니다. 순위는 각각의 새 파티션에 대해 순위 정수 값이 1부터 시작하는 각 파티션에서 독립적으로 수행됩니다.



마지막으로 행 순서를 결정하는 열 또는 표현식을 지정하는 ORDER BY 절이 있습니다.





PostgreSQL Rank() 함수 예제

다음 쿼리는 PostgreSQL의 rank() 함수를 사용하는 기본적인 예를 보여줍니다.

SELECT 값, RANK() OVER (ORDER BY 값) AS 순위
에서 (
값 (10), (20), (5), (15), (10)
) AS 데이터(값);

이 예에서는 오름차순을 기준으로 값의 순위를 지정합니다. 값의 두 항목은 유사하고 순서 내에서 동일한 위치에 나타나므로 동일한 순위로 할당됩니다.



결과 테이블은 다음과 같습니다.

SELECT 값, RANK() OVER (PARTITION BY 값 % 2 ORDER BY 값) AS 순위
에서 (
값 (10), (20), (5), (15), (10)
) AS 데이터(값);

Partition By 절이 있는 PostgreSQL Rank() 함수 예제

다음 예를 고려하십시오.

SELECT 값, RANK() OVER (PARTITION BY 값 % 2 ORDER BY 값) AS 순위
에서 (
값 (10), (20), (5), (15), (10)
) AS 데이터(값);

이 예에서는 값이 짝수인지 홀수인지 확인하는 표현식과 함께 PARTITION BY 절을 추가했습니다. 이렇게 하면 값이 두 개의 파티션으로 효율적으로 그룹화됩니다. 하나는 짝수(나머지가 0)이고 다른 하나는 홀수(나머지가 1)입니다.

결과 집합은 다음과 같습니다.

여러 SQL 기능을 결합한 PostgreSQL Rank() 함수 예제

rank() 함수를 사용하여 더 복잡한 쿼리를 만들 수도 있습니다. 예를 들어 Pagila 데이터베이스를 사용하십시오. 총 임대료를 기준으로 상위 5명의 고객을 가져와서 순위를 할당한다고 가정합니다.

다음 쿼리와 같이 rank() 함수를 사용할 수 있습니다.

SELECT customer_id, first_name, last_name, total_payments,
RANK() OVER (ORDER BY total_payments DESC) AS 순위
에서 (
c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_payments 선택
FROM 고객 c
JOIN 결제 p ON c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name
) AS 고객_결제
ORDER BY 순위
제한 10;

이 예에서는 customer_id, first_name, last_name, total_payment 및 할당된 rank()를 선택합니다. 그런 다음 rank() 함수를 사용하여 내림차순으로 정렬된 total_payment를 기준으로 각 고객에게 순위를 할당합니다.

내부 하위 쿼리를 사용하면 고객 및 지불 테이블을 조인하여 각 고객의 총 지불액을 계산할 수 있습니다. 그런 다음 customer_id, first_name 및 last_name 열을 기준으로 결과를 그룹화하여 각 고객의 지불액 합계를 가져옵니다.

마지막으로 외부 쿼리에서 결과 집합에 rank() 함수를 적용하고 total_payments를 기준으로 오름차순으로 정렬합니다. 또한 상위 10개 행만 가져오는 limit 절도 포함합니다.

보시다시피 정렬, 필터링, 집계, 조인 등과 같은 여러 SQL 기능을 결합하여 보다 통찰력 있는 데이터를 생성할 수 있습니다.

결론

PostgreSQL의 rank() 함수를 사용하여 정의된 조건에 따라 결과 집합에서 주어진 행의 순위를 가져오는 방법을 살펴보았습니다. 또한 rank() 함수를 다른 SQL 도구와 결합하여 더 복잡한 쿼리를 생성하는 방법도 다루었습니다.