작성
·
36
0
해당 강의의 1:39 초에
ORDER BY sal ROWS UNBOUNDED PRECEDING을 추가적으로 넣어주셨는데
avg의 결과값이 이해가 안돼서 질문드리게 되었습니다.
avg를 계산할 때도 rows unbounded preceding이 적용되었으니 [CLERK] 파티션에서는
- SMITH : 800
- ADAMS : (800+950) /2 = 875
이런식으로 계산이 되어야 하는건 아닌지 궁금합니다.
하단 테이블에 실제 계산된 값을 보니, [CLERK] 파티션의 AVG 값은 (800 + 950 + 1100+ 1300) / 4 = 1,037.5 값을 출력한 것으로 보이는데 이유가 궁금합니다!
답변 2
0
안녕하세요, rudans님.
선생님께서 예리하게 잘 보셨습니다.
정확히는 두번째가 ADAMS가 아니고 JAMES 이긴 합니다만 추측하신 것이 맞습니다.
제가 쿼리를 수정하고 실행하지 않아서 혼동을 드렸습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. rudans님.
질문해주신 부분은 SQL의 윈도우 함수에서 ROWS UNBOUNDED PRECEDING
절이 어떻게 작동하는지를 이해하는데 중점을 두고 있습니다. ROWS UNBOUNDED PRECEDING
는 현재 행까지의 모든 이전 행들을 포함하여 계산을 수행하라는 지시입니다. 따라서 각 행의 평균을 계산할 때 해당 행까지의 모든 이전 행의 값들이 포함됩니다.
예를 들어, CLERK
파티션 내에서:
SMITH: 첫 번째 행이므로 값 800
만 포함되어 평균이 800
입니다.
ADAMS: SMITH와 ADAMS의 두 행이 포함되므로, 평균은 ((800 + 950) / 2 = 875)로 계산됩니다.
하지만 여기에 주의해야 할 부분이 있습니다. 질문에서 언급하신 예시는 특정 상황에서 전체 파티션 집계의 결과일 수 있습니다. ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
와 같은 구문이 제공되지 않았다면, PARTITION BY
는 전체 파티션을 대상으로 하여, 각 파티션의 모든 행을 전체로 집계하여 평균을 나타낼 수 있습니다.
이러한 메커니즘을 제대로 활용하기 위해서 웬도우 함수의 동작 특징을 이해하는 것이 중요합니다. 질문에서 다룬 상황은 모든 해당 요소의 집계를 사용하여 각 파티션의 행간 윈도우를 형성합니다. 따라서 [CLERK] 파티션의 전체 값으로 나눠진 평균이 계산된 것입니다.
추가적으로 아래의 링크에서 이와 관련된 내용을 더 자세히 살펴볼 수 있습니다:
- 윈도우 함수와 GROUP BY의 차이
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.