[SQL] BigQuery에서 윈도우 함수 결과 필터링하기

Unit·2025년 12월 25일

SQL

목록 보기
53/59

로그 데이터를 다루다 보면 각 사용자별로 최신 1건만 추출해야 하는 상황이 있습니다.

이때 대부분 아래 패턴을 씁니다.

  • ROW_NUMBER()로 순번 생성
  • 서브쿼리 / CTE로 한 번 감싸기
  • 바깥에서 WHERE rn = 1

결과는 맞지만, 쿼리를 좀 더 간단히 할 순 없을까요?


🖐🏻 제약 사항

WHERE 절에서는 윈도우 함수 결과를 사용할 수 없습니다.

  • WHERE는 윈도우 함수보다 먼저 실행
  • ROW_NUMBER()SELECT 단계에서 계산

그래서 윈도우 함수 필터링을 위해 한 단계 더 감싸야 했습니다.


🧐 BigQuery의 해답 : QUALIFY

QUALIFY는 윈도우 함수 결과를 필터링하기 위한 절입니다.
실행 순서상 윈도우 함수 이후에 동작합니다.

같은 쿼리를 QUALIFY로 작성하면 다음과 같습니다.

SELECT
    user_id
  , event_time
FROM events
QUALIFY
  ROW_NUMBER() OVER (
    PARTITION BY user_id
    ORDER BY event_time DESC
  ) = 1;
  • 서브쿼리 ❌
  • CTE ❌
  • 핵심 로직 한눈에 ⭕

✍🏻 WHERE / HAVING / QUALIFY 한 줄 정리

필터 대상
WHERE원본 행
HAVING집계 결과
QUALIFY윈도우 함수 결과

정리

✔ 윈도우 함수 결과를 조건으로 걸러야 한다면, BigQuery에서는 QUALIFY를 활용해보세요.

profile
협업, 유지보수, 최적화를 고려한 데이터 실무 팁을 정리합니다.

0개의 댓글