> 데이터 베이스 > MySQL 튜토리얼 > 창 함수를 사용하여 PostgreSQL에서 누적 합계를 어떻게 계산할 수 있습니까?

창 함수를 사용하여 PostgreSQL에서 누적 합계를 어떻게 계산할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2025-01-12 17:23:45
원래의
194명이 탐색했습니다.

How Can I Calculate Cumulative Sums in PostgreSQL Using Window Functions?

PostgreSQL에서 윈도우 함수를 사용하여 누적합 계산

질문:

목표 테이블에 삽입해야 하는 재무 데이터와 누적 합계가 포함된 스테이징 테이블이 있습니다. 스테이징 테이블 구조에는 다음 열이 포함되어 있습니다.

  • ea_month: 월
  • id: 고유 식별자
  • amount: 거래금액
  • ea_year: 연도
  • circle_id : 거래 관련 동아리

대상 테이블에는 각 행의 누적 금액을 반영하는 추가 열cum_amt이 포함되어야 합니다.

해결책:

이를 위해 PostgreSQL의 창 기능 기능을 사용하면 다양한 행에 대해 계산을 수행할 수 있습니다. 특히 OVER 절을 사용하여 정의된 창(이 경우 SUM) 내에서 집계 함수를 적용할 수 있습니다.

<code class="language-sql">SELECT ea_month, id, amount, ea_year, circle_id,
       sum(amount) OVER (PARTITION BY circle_id ORDER BY ea_year, ea_month) AS cum_amt
FROM   tbl
ORDER  BY circle_id, ea_year, ea_month;</code>
로그인 후 복사

이 쿼리에서:

  • PARTITION BY circle_id: circle_id을 기준으로 데이터를 그룹으로 나누고 누적 합계가 각 원에 대해 별도로 계산되는지 확인합니다.
  • ORDER BY ea_year, ea_month: 각 파티션 내의 정렬 순서를 지정하여 누적 합계가 시간순으로 계산되도록 합니다.
  • cum_amt: aggregationSUM 표현식은 파티션 시작부터 현재 행까지 모든 행을 고려하여 각 행의 누적 합계를 계산합니다.

참고: 올바른 계산 그룹화를 보장하려면 테이블 쌍(circle_id, ea_year, ea_month)에 고유 인덱스가 있는지 확인하세요. 이렇게 하면 동일한 circle_id, ea_yearea_month이 있는 행이 항상 정렬된 순서로 함께 표시됩니다.

윈도우 함수 기법을 이용하면 각 행의 누적합을 효율적으로 계산하여 대상 테이블에 삽입할 수 있습니다.

위 내용은 창 함수를 사용하여 PostgreSQL에서 누적 합계를 어떻게 계산할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿