자격증/SQLD

SQLD 그룹함수 정리, GROUP BY·ROLLUP·CUBE 헷갈림 잡기

공감(공부하는감자) 2026. 7. 7. 13:04

SQLD 그룹함수 정리, GROUP BY·ROLLUP·CUBE 헷갈림 잡기

안녕하세요, 공부하는 감자입니다 🥔

SQLD 2과목에서 조인·서브쿼리 다음으로 발목 잡는 게 그룹함수예요. 특히 ROLLUP과 CUBE가 결과에서 어떻게 달라지는지 물으면 손이 멈추는 분이 많더라고요.

그래서 이 글엔 SQLD 그룹함수를 GROUP BY 기본부터 ROLLUP·CUBE 차이까지, 결과가 몇 행 나오는지로 구분하는 법을 정리했어요.

그룹함수는 문법보다 "집계 행이 어디에 붙느냐"를 보면 풀립니다.

집계함수와 GROUP BY의 규칙

먼저 COUNT·SUM·AVG·MAX·MIN 같은 집계함수는 여러 행을 하나로 접습니다. 여기서 시험이 노리는 함정이 NULL이에요.

COUNT(*)는 NULL 포함 전체 행을 세지만, COUNT(급여)는 급여가 NULL인 행을 빼고 셉니다. AVG도 NULL을 분모에서 제외해요.

그리고 GROUP BY에 없는 일반 컬럼을 SELECT에 그냥 쓰면 오류입니다. 집계함수이거나 GROUP BY에 들어간 컬럼만 나올 수 있어요.

HAVING과 WHERE는 자르는 시점이 다르다

WHERE는 그룹으로 묶기 전에 행을 거르고, HAVING은 묶은 뒤 그룹을 거릅니다. 그래서 집계 결과에 조건을 걸 땐 HAVING을 써야 해요.

"부서 평균 급여가 300 이상"처럼 집계값에 거는 조건은 WHERE에 못 넣습니다.

이 시점 차이를 묻는 문제가 자주 나오니, WHERE→GROUP BY→HAVING 순서를 몸에 익혀 두세요.

ROLLUP과 CUBE, 소계가 갈린다

핵심입니다. 판매(지점, 상품, 금액) 테이블을 지점·상품으로 묶는다고 할게요.

구문 만들어지는 소계
GROUP BY 지점, 상품 조합별 합계만
ROLLUP(지점, 상품) 조합 + 지점별 소계 + 전체 총계
CUBE(지점, 상품) 조합 + 지점별 + 상품별 + 전체 총계

ROLLUP은 계층적이라 앞 컬럼 기준 소계만 만들고, CUBE는 모든 방향의 소계를 다 만듭니다. 그래서 CUBE 결과 행이 항상 더 많거나 같아요.

결국 조인과 똑같이 "결과가 몇 행이냐"로 접근하는 유형이라, SQLD 조인 문제 몇 행이 나오느냐와 같은 감각으로 세면 실수가 줄어요.

GROUPING SETS는 원하는 집계 단위만 콕 집어 나열하는 방식이라, "지점별과 상품별 소계만, 전체 총계는 빼고" 같은 요구에 씁니다.

저는 이 셋의 결과 행 수를 문어CBT 무료 모의고사에서 직접 돌려 보며 감을 잡았는데, 채점이 자동이라 내 예상과 실제 결과를 바로 맞춰볼 수 있었어요.

 

SQLD·정처기·컴활·ADsP 무료 CBT 모의고사

기출 변형 문제, 자동 채점, 회차별 실력 추적까지 가입 없이 바로 풀어보세요.

sqldpass.com

GROUPING 함수는 소계 표시등

소계로 만들어진 행은 해당 컬럼이 NULL로 비는데, 이게 원래 데이터의 NULL인지 소계라서 빈 건지 구분이 안 될 때가 있어요. 그때 GROUPING(컬럼)을 쓰면 소계 행은 1, 일반 행은 0을 돌려줍니다.

"이 행이 소계냐"를 판별하는 표시등이라고 보면 됩니다.

자주 묻는 질문

Q. ROLLUP과 CUBE 중 시험에 뭐가 더 나오나요?

둘 다 나오지만, 결과 행 수를 비교시키는 문제가 많아요. ROLLUP은 앞 컬럼 기준 소계까지, CUBE는 모든 조합 소계까지라는 점만 잡으면 대부분 맞힙니다.

Q. GROUP BY 없이 집계함수만 쓰면 어떻게 되나요?

전체를 한 그룹으로 보고 한 행으로 집계합니다. 다만 이때 SELECT에 일반 컬럼을 같이 쓰면 오류가 나니 주의하세요.

함께 보면 좋은 글