본문 바로가기
일일퀘스트 일일퀘스트

SQLD 시험 문제: 윈도우 함수(Window Function) 구문과 순위 산정

ace 읽는 시간 약 7분

윈도우 함수가 데이터 분석의 핵심인 이유

SQLD 자격증 시험을 준비하거나 실무에서 데이터를 다루는 분들이라면 윈도우 함수를 만나는 순간 큰 벽을 느끼곤 합니다. 하지만 윈도우 함수는 데이터의 행과 행 사이의 관계를 정의하거나, 특정 범위의 데이터를 집계할 때 없어서는 안 될 강력한 도구입니다. 일반적인 그룹 함수(GROUP BY)는 데이터를 그룹화하여 행을 축소하지만, 윈도우 함수는 원본 행의 개수를 유지하면서도 그 행에 필요한 통계적 정보를 덧붙여줍니다. 이 차이를 이해하는 것이 SQL 고수로 가는 첫걸음입니다.

윈도우 함수의 기본 구조 이해하기

윈도우 함수의 문법은 처음에는 복잡해 보일 수 있지만, 구조를 뜯어보면 매우 논리적입니다. 기본적으로 함수 이름과 OVER 절로 구성됩니다.

  • 함수명(): RANK, DENSE_RANK, ROW_NUMBER, SUM, AVG 등
  • PARTITION BY: 데이터를 어떤 기준(그룹)으로 나눌지 결정합니다.
  • ORDER BY: 그룹 내에서 어떤 순서로 계산할지 결정합니다.
  • WINDOWING: 계산 범위를 지정합니다(예: ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW).

이 구조를 제대로 파악하면 복잡한 서브쿼리나 조인 없이도 깔끔하게 원하는 결과를 추출할 수 있습니다. 예를 들어, ‘부서별로 급여가 높은 순서대로 등수를 매기고 싶다’는 요구사항을 윈도우 함수 한 줄로 해결할 수 있습니다.

순위 산정 함수의 종류와 차이점

SQLD 시험에서 가장 자주 출제되는 부분은 순위 함수입니다. 이들은 비슷해 보이지만 동점자 처리 방식에서 큰 차이를 보입니다. 아래 표를 통해 차이점을 명확히 구분하세요.

함수 이름 동점자 처리 방식 결과 예시(100, 90, 90, 80점)
RANK 동점자는 같은 순위, 다음 순위는 건너뜀 1, 2, 2, 4
DENSE_RANK 동점자는 같은 순위, 다음 순위는 연속됨 1, 2, 2, 3
ROW_NUMBER 동점자라도 고유한 번호를 부여함 1, 2, 3, 4

실무에서는 비즈니스 로직에 따라 선택이 달라집니다. 예를 들어, 마케팅 이벤트에서 선착순 3명을 뽑을 때는 ROW_NUMBER가 적합하고, 성적 우수자를 장학금 수혜자로 선정할 때는 동점자를 고려하여 DENSE_RANK를 사용하는 것이 합리적입니다.

실생활에서의 활용 방법

윈도우 함수는 단순히 시험 문제 풀이용이 아닙니다. 일상적인 비즈니스 데이터 분석에서 다음과 같이 활용됩니다.

  • 누적 합계 계산: 일자별 매출 데이터를 바탕으로 월 누적 매출을 구할 때 사용합니다.
  • 이동 평균 계산: 최근 3개월의 평균 매출을 구하여 트렌드를 분석할 때 유용합니다.
  • 전일 대비 실적 비교: LAG 함수를 사용하여 어제와 오늘의 매출 차이를 한눈에 파악합니다.
  • 상위 N개 데이터 추출: 각 카테고리별로 매출이 가장 높은 상품 3개씩만 뽑아내는 작업에 필수적입니다.

흔한 오해와 사실 관계 바로잡기

많은 입문자가 ‘윈도우 함수는 GROUP BY와 함께 사용할 수 없다’고 오해합니다. 하지만 윈도우 함수는 SELECT 절이나 ORDER BY 절에서만 사용 가능하며, WHERE 절이나 GROUP BY 절에서는 사용할 수 없습니다. 이 제약 사항을 기억하는 것이 SQLD 시험의 핵심 포인트입니다.

또한, 많은 분이 윈도우 함수가 느릴 것이라고 생각합니다. 물론 대량의 데이터를 정렬할 때는 리소스를 소모하지만, 복잡한 서브쿼리를 반복적으로 수행하는 것보다 훨씬 효율적입니다. 최적화된 인덱스를 활용하면 성능 저하를 최소화하면서도 가독성 높은 쿼리를 작성할 수 있습니다.

전문가가 제안하는 학습 전략

윈도우 함수를 정복하려면 ‘데이터의 흐름’을 상상해야 합니다. PARTITION BY는 데이터를 칸막이로 나누는 것이고, ORDER BY는 그 칸막이 안에서 줄을 세우는 것이라고 생각하세요. 처음에는 간단한 예제부터 시작하세요. 사원 테이블에서 부서별 급여 순위를 매기는 것부터 연습하고, 점차 누적 합계나 이전 데이터 비교로 범위를 넓혀가는 것이 좋습니다.

또한, SQLD 시험을 준비한다면 다음의 주의사항을 반드시 기억하세요. 시험에서는 종종 ‘순위 함수 결과가 무엇인가’를 묻는 문제가 나옵니다. 이때 동점자가 있을 때 순위가 어떻게 변하는지, PARTITION BY가 생략되면 전체 데이터를 대상으로 순위가 매겨진다는 점을 놓치지 마세요.

자주 묻는 질문과 답변

Q1. PARTITION BY를 생략하면 어떻게 되나요?

전체 데이터를 하나의 그룹으로 간주합니다. 즉, 테이블 전체 행을 대상으로 순위를 매기거나 집계를 수행하게 됩니다.

Q2. ROW_NUMBER와 RANK 중 무엇을 더 많이 쓰나요?

데이터의 중복을 허용하지 않고 유니크한 번호를 매겨야 할 때는 ROW_NUMBER가 압도적으로 많이 쓰입니다. 반면, 데이터의 상대적 위치나 등급을 매길 때는 RANK나 DENSE_RANK가 유용합니다.

Q3. 윈도우 함수의 성능을 높이려면 어떻게 해야 하나요?

ORDER BY 절에 사용되는 컬럼에 적절한 인덱스를 생성하는 것이 가장 효과적입니다. 정렬 작업이 윈도우 함수의 핵심이기 때문입니다.

비용 효율적인 데이터 분석을 위한 팁

기업 환경에서 대규모 데이터를 다룰 때는 쿼리 한 줄이 비용으로 직결됩니다. 윈도우 함수를 활용하면 불필요한 조인 연산을 줄일 수 있습니다. 예를 들어, 자기 자신을 조인(Self-Join)하여 누적 합계를 구하는 방식은 데이터가 커질수록 기하급수적으로 느려집니다. 이때 SUM() OVER()를 사용하면 단 한 번의 스캔으로 결과를 얻을 수 있어 컴퓨팅 자원을 획기적으로 절약할 수 있습니다. 똑똑한 쿼리 작성은 곧 비용 절감이라는 사실을 명심하세요.

데이터 분석가로 성장하기 위한 로드맵

윈도우 함수를 자유자재로 다루게 되었다면, 이제는 윈도우 프레임 절을 적극적으로 활용해 보세요. ROWS BETWEEN, RANGE BETWEEN 등을 활용하면 훨씬 세밀한 기간별 분석이 가능해집니다. 예를 들어 ‘현재 행을 포함해 앞뒤 1개 행씩 총 3개의 데이터 평균’을 구하는 식의 분석은 시계열 데이터 관리에서 매우 강력한 힘을 발휘합니다.

SQLD 시험은 시작일 뿐입니다. 시험을 통해 배운 윈도우 함수의 원리를 실무 데이터에 적용해보고, 직접 결과값을 확인해보는 과정을 반복하세요. 이론과 실습이 결합할 때 비로소 데이터 분석 역량이 완성됩니다. 지금 바로 사내 데이터나 오픈 데이터를 활용해 다양한 윈도우 함수를 조합해보고, 나만의 분석 쿼리를 작성해 보시길 권장합니다.

ace

ace
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

error: Content is protected !!

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.