이 쿼리의 목표는 시간에 따른 특정 사용자의 누적 손익을 계산하는 것입니다. 하지만 초기 시도에서는 PostgreSQL의 창 함수 특성에 대한 오해로 인해 오류가 발생합니다.
"column "sp.payout"이라는 오류 메시지가 GROUP BY 절 또는 집계 함수에 사용됨"은 PostgreSQL이 sp.payout 및 s.buyin 열이 GROUP BY 절은 집계 함수 sum()에서 사용되기 때문입니다. 그러나 이는 오해입니다.
이 쿼리에서는 sum()이 집계 함수가 아닌 윈도우 함수로 사용되고 있습니다. 창 함수는 집계 함수와 달리 지정된 범위 내의 값을 집계하지만 작업 후 모든 개별 행을 유지합니다. 이는 집계 함수에 대한 쿼리의 잘못된 가정이 간과하고 있는 중요한 차이점입니다.
해결책은 윈도우 함수를 올바르게 식별하고 활용하는 것입니다. PostgreSQL은 집계 함수가 먼저 적용되는 창 및 집계 함수의 조합을 허용합니다.
수정된 쿼리는 다음 이해를 통합합니다.
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 p JOIN result r ON r.player_id = p.player_id JOIN game g ON g.game_id = r.game_id JOIN event e ON e.event_id = g.event_id JOIN structure s ON s.structure_id = g.structure_id JOIN structure_payout 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(sum(sp.payout)) OVER w)에서 외부 sum()은 창입니다. 함수인 반면 내부 sum()은 집계 함수입니다. 집계 함수는 각 이벤트 내의 지불금 및 바이인 값을 합산하고 창 함수는 지정된 범위에 걸쳐 이러한 집계 결과를 합산합니다.
위 내용은 내 PostgreSQL 쿼리가 창 함수를 사용할 때 '열 'sp.payout'이 GROUP BY 절에 나타나야 합니다' 오류를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!