Database/MySQL

[MySQL] GROUP BY ... ROLLUP 쿼리

Razelo 2025. 6. 15. 10:56

간만에 쿼리 공부하던 중 재밌는 쿼리가 있어서 소개한다. 

 

쿼리는 아래와 같다. (이거 indent 왜 깨지지?)  

SELECT         
	IF(GROUPING(first_name), 'All first_name', first_name) AS first_name,  
    IF(GROUPING(last_name), 'All last_name', last_name) AS last_name, 
    COUNT(*) 
FROM employees 
GROUP BY first_name, last_name WITH ROLLUP;

 

보면 first_name, last_name 순으로 GROUP BY를 하는데 WITH ROLLUP을 통해 subtotal을 보여주려고 하고 있다. 

이때 내가 처음본 절이 위에서 IF(GROUPING(...)...) 절이다. 

 

GROUPING()함수의 경우 ROLLUP에 의해 만들어진 결과행 컬럼인지 확인해주고 맞다면 1을 반환한다.

(즉 subtotal에 의한 값은 NULL이 나오기 때문에 이 NULL값이면 1을 반환한다는 뜻이다.)

그리고 IF의 경우는 IF(CONDITION, a, b)인 경우 CONDITION이 true면 a를 선택하고 false면 b를 선택한다. 

 

정리하면 ROLLUP에 의한 subtotal 결과컬럼이면 'All first_name' 등을 출력하고 아니면 first_name컬럼값 그대로 내보낸다는 쿼리다. 

 

공부하던 중 발견한 쿼리에 설명이 부족하여 찾아봤다. 

 

'Database > MySQL' 카테고리의 다른 글

[MySQL] Window환경에서 Replication 실습하는 방법  (0) 2025.06.29
[MySQL] CTE 예시 쿼리  (0) 2025.06.15