5. 자주 하는 실수 (Tip)
실수 1: 소계의 NULL 과 데이터의 NULL 을 혼동한다
dept IS NULL 로 총계나 소계를 판별하면 원래 부서가 NULL 인 행도 소계로 취급됩니다. 변형 3 에서 최임시의 주문 50 이 "총계" 라벨을 달았습니다. 표준 문법에서는 GROUPING() 으로, 대체 쿼리에서는 lvl 구분 컬럼으로 구분합니다.
MySQL 5.7 이하에는 GROUPING() 이 없으므로, 부서를 COALESCE(dept, '(없음)') 로 먼저 바꿔 진짜 NULL 이 남지 않게 한 뒤 집계하는 우회를 씁니다.
실수 2: 소계 행의 위치가 정해진 것으로 믿는다
소계가 상세 뒤에 온다는 보장은 문법에 없습니다. NULL 정렬 위치가 DB 마다 달라서 예제 2 처럼 소계가 앞에 오기도 합니다. ORDER BY 에 GROUPING() 이나 lvl 을 넣어 순서를 직접 정하세요.
실수 3: ROLLUP 컬럼 순서를 무심코 바꾼다
ROLLUP(dept, mon) 과 ROLLUP(mon, dept) 는 서로 다른 소계를 만듭니다. 앞의 것은 부서 소계, 뒤의 것은 월 소계입니다. 어느 축으로 소계를 원하는지 정하고 큰 단위를 앞에 씁니다.