SQLD 윈도우 함수, 그림 두 장으로 끝내기
"윈도우 함수랑 GROUP BY랑 뭐가 다른 거예요?"
SQLD 2과목에서 서브쿼리 다음으로 많이 나오는 질문입니다. 둘 다 '집계'를 한다는 점에서 헷갈리기 쉽지만, 결과물의 모양이 완전히 다릅니다. 이 차이 하나만 잡으면 윈도우 함수 문제의 절반은 풀립니다.
1. 행이 줄어드느냐, 그대로 있느냐
GROUP BY는 여러 행을 하나로 뭉칩니다. 영업1팀 사원이 두 명이면, 팀별 합계를 구하는 순간 그 두 행은 한 행으로 합쳐지고 사라집니다.
윈도우 함수는 다릅니다. OVER 절을 쓰면 원래 행은 그대로 유지한 채, 순위나 합계 같은 계산 결과를 컬럼 하나로 추가만 합니다. 위 그림처럼 김민수·이서연 두 사람의 행이 그대로 남고, 옆에 순위 컬럼만 붙는 식입니다.
그래서 SQLD 시험에는 "OVER 절을 쓰면 조회되는 행 수가 줄어든다"는 선지가 종종 등장합니다.
이는 틀린 보기입니다. 원본 행 수는 그대로, 컬럼만 늘어난다는 것을 꼭 기억하세요.
2. RANK 3형제, 동점 처리로 구분한다
윈도우 함수 중 순위를 매기는 함수 세 가지가 유독 헷갈립니다. 셋의 차이는 동점자를 어떻게 처리하느냐 하나로 갈립니다.
시험에서는 실제 데이터에 동점자를 넣어두고 "이 쿼리의 결과로 옳은 것은?"을 묻는 방식이 많습니다. 세 함수의 이름을 외우기보다, 동점자 뒤의 번호가 건너뛰는지 아닌지로 구분하는 게 실전에서 훨씬 빠릅니다.
3. 실전 감각 점검 — 이 문제 풀리나요?
Q. PARTITION BY는 무슨 역할을 할까요?
PARTITION BY 부서명은 "부서별로 나눠서" 순위를 다시 매기라는 뜻입니다. GROUP BY처럼 행을 합치는 게 아니라, 전체 사원을 부서 단위로 묶음만 나눠서 각 묶음 안에서 순위를 계산합니다. 그래서 결과에는 모든 사원이 그대로 남고, 부서마다 1등부터 순위가 다시 시작됩니다.
이 문제가 자연스럽게 읽혔다면 윈도우 함수 기본기는 잡힌 겁니다. 아직 헷갈린다면, PARTITION BY 없는 쿼리와 있는 쿼리를 나란히 놓고 결과를 비교해보는 연습이 가장 빠릅니다.
윈도우 함수를 문제로 굳히고 싶다면
『빠르게 따는 SQLD』 1권 「2장 SQL 활용」에서는 오늘 다룬 RANK 3형제뿐 아니라 LAG/LEAD, 이동 평균까지 실무에서 자주 쓰는 윈도우 함수를 기출변형 문제와 함께 다룹니다. 해설은 정답의 이유뿐 아니라 나머지 보기가 왜 틀렸는지까지 '오답 노트' 방식으로 풀어냈습니다.
책 없이도 지금 바로 실력을 점검하고 싶다면, 골든래빗 CBT에서 SQLD 기출변형 문제를 실제 시험과 같은 화면으로 풀어볼 수 있습니다.
공부하다 막히는 부분은 빠따 SQLD 공식 카카오톡 질문방에서 저자에게 직접 물어볼 수 있습니다.
