ROLLUP과 ORDER BY는 함께 사용할 수 있을까?
결론부터 말하면, MySQL에서 ROLLUP과 ORDER BY는 상호 배타적인 관계이기 때문에 하나의 쿼리에서 두 절을 함께 사용하는 것은 권장되지 않습니다.
그럼에도 불구하고 ROLLUP과 함께 ORDER BY를 사용할 경우 가장 큰 문제점은 요약 행(summary row)이 일반 데이터 행들과 함께 정렬된다는 것입니다. 즉, 정렬 순서에 따라 요약 행의 위치가 달라지게 됩니다.
정렬 순서에 따른 요약 행의 위치
요약 행은 다음과 같은 규칙으로 배치됩니다.
- 오름차순(ASC) 정렬 시: 요약 행이 결과의 맨 앞에 위치
- 내림차순(DESC) 정렬 시: 요약 행이 결과의 맨 뒤에 위치
아래 예제를 통해 더 명확하게 이해해 보겠습니다.
예제 1: 내림차순(DESC) 정렬
mysql> Select * from (Select sr, SUM(PRICE) AS PRICE from ratelist GROUP BY sr WITH ROLLUP) AS Price ORDER BY Sr DESC; +------+-------+ | sr | PRICE | +------+-------+ | 5 | 250 | | 4 | 850 | | 3 | 1005 | | 2 | 630 | | 1 | 502 | | NULL | 3237 | +------+-------+ 6 rows in set (0.00 sec)
위 결과를 보면 내림차순 정렬 시 요약 행(NULL, 총합 3237)이 맨 아래, 즉 마지막에 위치하는 것을 확인할 수 있습니다.
예제 2: 오름차순(ASC) 정렬
mysql> Select * from (Select sr, SUM(PRICE) AS PRICE from ratelist GROUP BY sr WITH ROLLUP) AS Price ORDER BY Sr ASC; +------+-------+ | sr | PRICE | +------+-------+ | NULL | 3237 | | 1 | 502 | | 2 | 630 | | 3 | 1005 | | 4 | 850 | | 5 | 250 | +------+-------+ 6 rows in set (0.01 sec)
반면 오름차순으로 정렬하면 요약 행(NULL)이 맨 위, 즉 첫 번째 행으로 이동합니다.
정리
ROLLUP과 ORDER BY를 함께 사용하는 것은 기술적으로 가능하지만, 요약 행이 일반 행과 섞여 정렬되기 때문에 결과 해석이 혼란스러워질 수 있습니다. 따라서 실무에서는 서브쿼리로 ROLLUP 결과를 먼저 생성한 후 외부 쿼리에서 정렬하는 방식을 사용하더라도, 요약 행의 위치가 정렬 순서에 영향을 받는다는 점을 반드시 고려해야 합니다.