[SQL] PostgreSQL의에서 누적 합계를 계산
SQLPostgreSQL의에서 누적 합계를 계산
나는 필드의 누적 또는 실행 양을 찾아 테이블에 준비에서 삽입하고자합니다. 내 준비 구조는 다음과 같은 것입니다 :
ea_month id amount ea_year circle_id
April 92570 1000 2014 1
April 92571 3000 2014 2
April 92572 2000 2014 3
March 92573 3000 2014 1
March 92574 2500 2014 2
March 92575 3750 2014 3
February 92576 2000 2014 1
February 92577 2500 2014 2
February 92578 1450 2014 3
나는 다음과 같이 뭔가 내 목표 테이블을 원하는 :
ea_month id amount ea_year circle_id cum_amt
February 92576 1000 2014 1 1000
March 92573 3000 2014 1 4000
April 92570 2000 2014 1 6000
February 92577 3000 2014 2 3000
March 92574 2500 2014 2 5500
April 92571 3750 2014 2 9250
February 92578 2000 2014 3 2000
March 92575 2500 2014 3 4500
April 92572 1450 2014 3 5950
나는 정말 많은이 결과를 달성 대해 이동하는 방법과 혼동하고 있습니다. 나는 PostgreSQL을 사용하여이 결과를 달성하고자합니다.
사람이 결과 세트를 달성 대해 이동하는 방법을 제안 할 수 있습니다?
해결법
-
==============================
1.기본적으로, 당신은 여기에 윈도우 함수가 필요합니다. 즉 현재의 표준 기능입니다. 정품 윈도우 함수뿐만 아니라, 당신은 OVER 절을 추가하여 포스트 그레스에서 윈도우 함수와 같은 집계 함수를 사용할 수 있습니다.
기본적으로, 당신은 여기에 윈도우 함수가 필요합니다. 즉 현재의 표준 기능입니다. 정품 윈도우 함수뿐만 아니라, 당신은 OVER 절을 추가하여 포스트 그레스에서 윈도우 함수와 같은 집계 함수를 사용할 수 있습니다.
여기에 특별한 어려움은 파티션과 정렬 순서를 제대로하는 것입니다 :
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, month;
그리고 여기 없음 GROUP.
각 행의 합은 현재 행에 파티션의 첫 번째 행으로부터 계산된다 - 또는 매뉴얼을 인용하는 것으로 정확한 :
... 당신이 후하다 누적 또는 누적 합계이다. 굵게 강조 광산.
같은 (circle_id, ea_year, ea_month)와 행이 쿼리에서 "동료들"입니다. 그 모든 합계에 추가 된 모든 동료들과 같은 실행 합계를 보여줍니다. 그러나 나는 당신의 테이블에 UNIQUE (circle_id, ea_year, ea_month) 가정, 다음 정렬 순서가 결정하고 어떤 행 동료가 없습니다.
이제 BY ... ea_month ORDER 달 이름에 대한 문자열이 작동하지 않습니다. 포스트 그레스는 로케일 설정에 따라 알파벳 순으로 정렬 할 것입니다.
당신이 당신의 테이블에 저장된 실제 날짜 값이있는 경우 제대로 정렬 할 수 있습니다. 그렇지 않으면, 당신의 테이블에 입력 한 날짜의 단일 컬럼 월에 ea_year 및 ea_month를 교체하는 것이 좋습니다.
불행한 레이아웃 붙어 있지만,이 작동합니다 :
SELECT ea_month, id, amount, ea_year, circle_id , sum(amount) OVER (PARTITION BY circle_id ORDER BY mon) AS cum_amt FROM (SELECT *, to_date(ea_year || ea_month, 'YYYYMonth') AS mon FROM tbl) ORDER BY circle_id, mon;
from https://stackoverflow.com/questions/22841206/calculating-cumulative-sum-in-postgresql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL / MySQL의에서 "ON"과 "WHERE"의 차이는 문을 조인 무엇입니까? (0) | 2020.04.18 |
---|---|
[SQL] PL / SQL의 기능과 절차의 차이점은 무엇입니까? (0) | 2020.04.18 |
[SQL] MySQL의 : 저장 프로 시저 내에서 트랜잭션 (transaction) (0) | 2020.04.18 |
[SQL] SQL 열에서 문자의 인스턴스를 계산하는 방법 (0) | 2020.04.18 |
[SQL] 포스트 그레스에서 열 이름 키워드처럼 이스케이프 (0) | 2020.04.18 |