> 데이터 베이스 > MySQL 튜토리얼 > 내 PostgreSQL 쿼리가 창 함수를 사용할 때 '열 'sp.payout'이 GROUP BY 절에 나타나야 합니다' 오류를 생성하는 이유는 무엇입니까?

내 PostgreSQL 쿼리가 창 함수를 사용할 때 '열 'sp.payout'이 GROUP BY 절에 나타나야 합니다' 오류를 생성하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-06 11:19:46
원래의
914명이 탐색했습니다.

Why Does My PostgreSQL Query Generate a

PostgreSQL의 창 함수 및 그룹별 예외

이 쿼리의 목표는 시간에 따른 특정 사용자의 누적 손익을 계산하는 것입니다. 하지만 초기 시도에서는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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