시작하기무료로 시작하기

하나의 쿼리로 여러 집계를 결합하기

직전 세 연습 문제에서 ROLLUP, CUBE, GROUPING SETS 그룹화 연산자를 살펴봤습니다. 이 중에서 GROUPING SETS는 원하는 집계 수준을 정확히 구성할 수 있어 가장 사용자 정의가 용이합니다. GROUPING SETS는 계층 구조를 전제로 하지 않으며(이는 ROLLUP과 다릅니다), 여러 열을 다루더라도 관리 가능한 복잡도를 유지할 수 있습니다(CUBE와 대비됨).

이번 연습에서는 데이터를 가지고 다음 가설들을 검증해 보겠습니다:

  1. 2019년 11월에 교육을 도입한 이후 월별 사고 건수가 줄었습니다.
  2. 화요일에 다른 평일보다 사고가 더 많이 발생합니다.
  3. 주말이 평일보다 사고가 더 많이 발생합니다.

이 연습은 강의의 일부입니다

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;
코드 편집 및 실행