>데이터 베이스 >MySQL 튜토리얼 >누적 이익/손실을 계산하기 위해 Postgres에서 집계 함수와 함께 창 함수를 올바르게 사용하는 방법은 무엇입니까?

누적 이익/손실을 계산하기 위해 Postgres에서 집계 함수와 함께 창 함수를 올바르게 사용하는 방법은 무엇입니까?

DDD
DDD원래의
2025-01-06 11:07:44718검색

How to Correctly Use Window Functions with Aggregate Functions in Postgres to Calculate Cumulative Profit/Loss?

Postgres 창 기능 및 Group By 예외

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.