프로그래밍분석가-보고서 (SQL Analyst)

SUM() 집계 함수와 SUM() 윈도우 함수의 차이점은 무엇인가요? 어떤 문제에서 윈도우 함수를 사용하는 것이 더 바람직한가요? 예를 들어 주세요.

Hintsage AI 어시스턴트로 면접 통과

답변

집계 함수 SUM()은 결과 집합의 특정 그룹에 대해 모든 행의 값을 합산하여 각 그룹(또는 전체 쿼리)에 대해 하나의 값을 반환합니다. 윈도우 함수 SUM()OVER()를 통해 SELECT 내에서 정의된 "창" 값에 대한 합계를 계산할 수 있도록 하며, 이 경우 각 행은 결과에 유지되고 자신의 "창"에 대한 집계 결과에 접근할 수 있습니다. 이는 그룹에 대한 중간 결과를 얻는 데 특히 유용합니다.

집계 함수 예시:

SELECT department_id, SUM(salary) FROM employees GROUP BY department_id;

윈도우 함수 예시:

SELECT department_id, salary, SUM(salary) OVER (PARTITION BY department_id ORDER BY hire_date) FROM employees;

속임수 질문

“GROUP BY만으로 열에 대한 누적 합계를 얻을 수 있는가?”

답변: 아니요! GROUP BY는 최종 집계만 제공합니다. 누적 합계는 윈도우 함수나 더 복잡한 서브쿼리가 필요하며, 이는 더 복잡하고 느립니다.

예시:

SELECT salary, SUM(salary) OVER (ORDER BY hire_date) AS running_total FROM employees;

사례

트랜잭션 보고서에서 누적 합계는 많은 상관 서브쿼리로 구현되었습니다. 테이블이 커짐에 따라 성능이 수십 배 떨어졌습니다. 윈도우 함수로 전환하니 성능이 초 단위로 돌아왔습니다.


사례

GROUP BY를 통해 그룹별 결산을 복잡하게 분석하려고 하니 여러 단계의 데이터 추출 및 외부 소프트웨어 처리가 필요했습니다. 윈도우 함수는 하나의 SQL 쿼리로 필요한 보고서를 생성할 수 있게 해주었습니다.


사례

분석가가 잘못된 PARTITION BY를 사용하여 윈도우 함수가 포함된 쿼리를 작성했습니다. 결과적으로 다른 그룹의 데이터가 뒤섞였습니다. 최종 결과는 왜곡된 보고서였습니다. 그룹 나누기를 수정한 후 데이터가 올바르게 나타났습니다.