하나의 쿼리로 여러 집계를 결합하기
직전 세 연습 문제에서 ROLLUP, CUBE, GROUPING SETS 그룹화 연산자를 살펴봤습니다. 이 중에서 GROUPING SETS는 원하는 집계 수준을 정확히 구성할 수 있어 가장 사용자 정의가 용이합니다. GROUPING SETS는 계층 구조를 전제로 하지 않으며(이는 ROLLUP과 다릅니다), 여러 열을 다루더라도 관리 가능한 복잡도를 유지할 수 있습니다(CUBE와 대비됨).
이번 연습에서는 데이터를 가지고 다음 가설들을 검증해 보겠습니다:
- 2019년 11월에 교육을 도입한 이후 월별 사고 건수가 줄었습니다.
- 화요일에 다른 평일보다 사고가 더 많이 발생합니다.
- 주말이 평일보다 사고가 더 많이 발생합니다.
이 연습은 강의의 일부입니다
SQL Server에서의 시계열 분석
연습 안내
위의 가설에 따라 그룹화 집합을 작성하세요. 총합(Grand Total)에 더해 다음 그룹화 집합을 보고자 합니다:
- 달력 연도와 월별 한 세트
- 요일별 한 세트
- 해당 날짜가 주말인지 여부별 한 세트
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
SELECT
c.CalendarYear,
c.CalendarMonth,
c.DayOfWeek,
c.IsWeekend,
SUM(ir.NumberOfIncidents) AS NumberOfIncidents
FROM dbo.IncidentRollup ir
INNER JOIN dbo.Calendar c
ON ir.IncidentDate = c.Date
GROUP BY GROUPING SETS
(
-- Each non-aggregated column from above should appear once
-- Calendar year and month
(___, ___),
-- Day of week
(___),
-- Is weekend or not
(___),
-- This remains empty; it gives us the grand total
()
)
ORDER BY
c.CalendarYear,
c.CalendarMonth,
c.DayOfWeek,
c.IsWeekend;