인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

rudans님의 프로필 이미지

작성한 질문수

8시간 완성 SQLD(2과목)

집계 함수 SUM, AVG, MIN, MAX, COUNT

섹션13-집계함수 SUM, AVG, MIN, AVG, COUNT 강의

작성

·

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 인턴님의 프로필 이미지

안녕하세요, 인프런 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의 차이

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

rudans님의 프로필 이미지

작성한 질문수

질문하기