집 >데이터 베이스 >MySQL 튜토리얼 >누적 이익/손실을 계산하기 위해 Postgres에서 집계 함수와 함께 창 함수를 올바르게 사용하는 방법은 무엇입니까?
Postgres는 다양한 파티션의 데이터를 분석하는 창 기능을 제공합니다. 그러나 이를 집계 함수와 결합하면 혼란과 오류가 발생할 수 있습니다.
주어진 쿼리에서 사용자는 시간에 따른 사용자의 누적 손익을 계산하려고 시도하지만 오류가 발생합니다.
ERROR: column "sp.payout" must appear in the GROUP BY clause or be used in an aggregate function
이 오류는 sp.payout과 s.buyin에 적용된 SUM 함수가 OVER 절로 인해 실제로는 윈도우 함수이기 때문에 발생합니다. 창 함수는 파티션 내에서 값을 집계하는 동안 모든 행을 유지합니다.
이 문제를 해결하려면 먼저 데이터를 집계한 다음 창 함수에서 집계된 값을 사용하세요. 이 경우 각 이벤트에 대한 지불금과 바이인의 합계를 계산할 수 있습니다.
SELECT p.name, e.event_id, e.date, SUM(SUM(sp.payout)) OVER w - SUM(SUM(s.buyin)) OVER w AS "Profit/Loss" FROM player AS p JOIN result AS r ON r.player_id = p.player_id JOIN game AS g ON g.game_id = r.game_id JOIN event AS e ON e.event_id = g.event_id JOIN structure AS s ON s.structure_id = g.structure_id JOIN structure_payout AS sp ON sp.structure_id = g.structure_id AND sp.position = r.position WHERE p.player_id = 17 GROUP BY e.event_id WINDOW w AS (ORDER BY e.date, e.event_id) ORDER BY e.date, e.event_id;
여기서 외부 SUM 함수는 이벤트 내의 모든 결과에 대한 값을 집계하고 창 함수는 누적 이익을 계산합니다. /손실.
위 내용은 누적 이익/손실을 계산하기 위해 Postgres에서 집계 함수와 함께 창 함수를 올바르게 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!