[SQL/BigQuery] Big Query PIVOT 사용법과 GROUP BY ALL, ANY_VALUE 함수 정리 - 돌멩이의 데이터 분석

2025. 12. 5. 22:27·데이터베이스 DB/BigQuery

💻본 포스팅은 [인프런] 카일스쿨의 BigQuery(SQL) 활용편을 기반으로
요약 및 실습한 기록을 정리했습니다.


데이터 PIVOT 이란?

(1) Data PIVOT 정의

  • 특정 데이터를 기준(PIVOT) 삼아서, 그 축을 중심으로 데이터를 보기 좋게 정렬하는 과정

(2) PIVOT이 필요한 이유

  • 사용자 로그 데이터는 보통 "하나의 행동 = 하나의 ROW"로 길게 쌓임
  • 이 형태는 가독성이 낮고, 분석 시 불편함이 많음
  • BigQuery에는 추출 할 수 있는 행에 제한이 존재하므로, PIVOT을 활용해 이를 회피할 수 있음
    • 실제로 사용자는 한 번의 클릭을 하지만, 그 행동 하나에 UNNEST 시, 10개 이상의 ROW가 생성 될 수 있음

예시를 통한 PIVOT 문법

(1) 로그 해석

  • PIVOT은 당연하게도 데이터 로그 구조에 대한 완벽한 이해가 선행되어야함
  • 하고자 하는 일 : 사용자들에게서 발생하는 모든 unique한 event를 기준으로 데이터를 pivot 하고자함

  • 예시 : 배달 앱
    • event_date : 날짜
    • event_timestamp : 구체적 시간
    • event_name : 발생한 이벤트
    • event_params : 이벤트에 대한 여러 속성 (ARRAY)
      • ARRAY에 속한 값들은 각 이벤트에 대한 속성과 값을 나타낸다.
      • EX) click_cart가 발생한 화면 : food_detail 화면

(2) PIVOT 하기

  • 상황에 따라 SUM, MAX, COUNT 등 다양한 집계 함수를 사용하여 PIVOT
    • 저작권 문제로 예시 데이터로 대체
  • 예시) 표
    Jan Food 100
    Jan Toy 200
    Feb Food 150
    Feb Toy 300
    • 문제 : 판매 된 제품의 카테고리를 기준으로 월별 판매액 데이터를 만들어주세요
SELECT 
  category,
  -- (1) 기준 행 선택
  SUM(IF(month = 'Jan', sales, 0)) AS sales_jan,
  SUM(IF(month = 'Feb', sales, 0)) AS sales_feb
  -- (2) 월별 합계를 위해 SUM 함수 사용
  -- (3) IF문으로 해당 월이면 sales값, 아니면 0 반환
FROM sales_data
GROUP BY category;
-- (4) category 기준으로 그룹화

실습 중 기록해 둔 참고사항

(1) GROUP BY ALL

  • GROUP BY ALL은 SELECT 문에 선택 된 모든 비집계 컬럼을 기준으로 그룹화 하는 문법이다
SELECT 
  event_date,
  event_timestamp,
  event_name,
  user_id,
  user_pseudo_id,
  MAX(IF(param.key = "firebase_screen", value, NULL)) AS firebase_screen,
FROM practice
CROSS JOIN UNNEST(event_params) AS param
GROUP BY ALL
  • 여기서 내가 GROUP BY ALL을 활용한다면, event_date ~ user_pseudo_id 까지의 컬럼들을 기준으로 모두 그룹화
    • BigQuery 전용 문법

(2) ANY_VALUE

  • `GROUP BY`를 통해 쓸 수 있는 집계함수 중 하나
    • NULL값을 제외하고 그룹화 될 값 중 랜덤으로 하나를 선택
  • 다중 값이 존재하는 경우, MAX()나 MIN()으로 대체하는 것이 안전

집계함수에 대한 요약

함수 집계 방식 결정성 사용해도 되는 상황
ANY_VALUE() 그룹 내 임의의 값 ❌ 비결정적 그룹 내 값이 모두 동일할 때
MAX() / MIN() 가장 큰/작은 값 ✅ 결정적 다중 값 중 특정 기준이 필요할 때
ARRAY_AGG() 그룹 내 전체 값 리스트 ✅ 결정적 그룹 내 모든 값 확인할 때

(3) AS `컬럼명`  관련 오류

  • Syntax error: Unexpected integer literal "2023" at [36:53] /
    Syntax error: Unexpected string literal "2023-05-01" at [36:53]
    • 컬럼명을 숫자나 한글로 지정할 때 발생하는 오류
    • " " / 이나 ' ' 으로 묶어도 동일하게 에러 발생
      • ` `(Backtick)으로 묶어주면 오류 해결

 

저작자표시 (새창열림)

'데이터베이스 DB > BigQuery' 카테고리의 다른 글

[로그 분석] Window 함수로 유저 행동 및 이탈 구간 분석하기 - 돌멩이의 데이터 분석  (0) 2025.12.16
[SQL/BigQuery] QUALIFY 함수로 윈도우 함수 결과 필터링 - 돌멩이의 데이터 분석  (1) 2025.12.16
[SQL/BigQuery] 발로란트 프로젝트 예시로 이해하는 BigQuery의 PK(Primary Key) & FK(Foreign Key)  (0) 2025.12.15
[SQL/BigQuery] ARRAY, STRUCT 그리고 UNNEST를 통한 평탄화 과정(Section 2-2)  (0) 2025.12.03
[SQL/BigQuery] 앱 로그 데이터, ARRAY 에 대한 기초 이해 (Section 2-1)  (0) 2025.12.01
'데이터베이스 DB/BigQuery' 카테고리의 다른 글
  • [SQL/BigQuery] QUALIFY 함수로 윈도우 함수 결과 필터링 - 돌멩이의 데이터 분석
  • [SQL/BigQuery] 발로란트 프로젝트 예시로 이해하는 BigQuery의 PK(Primary Key) & FK(Foreign Key)
  • [SQL/BigQuery] ARRAY, STRUCT 그리고 UNNEST를 통한 평탄화 과정(Section 2-2)
  • [SQL/BigQuery] 앱 로그 데이터, ARRAY 에 대한 기초 이해 (Section 2-1)
ciNascrims__
ciNascrims__
공부 기록 + 일상 (알바 / 취업 / 취미 / 운동 / 데이터 분석 공부 등등) Data Analyst
  • ciNascrims__
    돌멩이의 데이터 분석
    ciNascrims__
  • 전체
    오늘
    어제
    • 글
      • 개인 프로젝트 (Project)
        • Valorant 유저 데이터 분석
      • 개인 프로젝트 및 실습 (Mini PJ)
        • Firebase 로그 분석 : Flood-It
      • 데이터 분석
        • 통계 이론
        • ML 이론
      • 데이터베이스 DB
        • BigQuery
        • 코딩테스트
      • 파이썬 Python
      • 태블로 Tableau
      • 마케팅 Marketing
      • 게임 Game
      • About Me
        • 주간일기
        • 게임
        • 자격증
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    기사시험
    리텐션
    Python
    funnel
    Duolingo
    VALORANT
    발로란트
    streamlit
    one-hot-encoding
    BigQuery
    범주형변수
    데이터분석가
    퍼널
    게임밸런스
    원핫인코딩
    로아 문제점
    beautifulsoap
    밸런스분석
    SQL
    여기어때
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
ciNascrims__
[SQL/BigQuery] Big Query PIVOT 사용법과 GROUP BY ALL, ANY_VALUE 함수 정리 - 돌멩이의 데이터 분석
상단으로

티스토리툴바