우와한 개발자

[SQL] 피벗 테이블 – 롱/와이드 포맷, OLTP/OLAP, PIVOT/UNPIVOT

by 우와한개발자

1. 데이터 저장 형식 : 롱 포맷과 와이드 포맷

1) 롱포맷 (Long Format)

  • 한 행 = 하나의 관측값
  • 같은 변수라도 행이 여러 개로 늘어남(값이 행에 들어있음)
  • 데이터가 세로로 길어짐
  • 분석, 통계, 시각화에 많이 사용
이름 과목 점수
A 수학 90
A 영어 85
B 수학 80
B 영어 88

 

2) 와이드 포맷 (Wide Format)

  • 한 행 = 하나의 대상
  • 변수들이 열로 나뉘어 있음 (값의 종류가 컬럼명으로 올라간 형태)
  • 데이터가 가로로 넓어짐
  • 보기 쉽고 직관적
이름 수학 영어
A 90 85
B 80 88

 

2. 데이터 처리 시스템 : OLTP와 OLAP

1) OLTP (Online Transaction Processing)

  • 실시간으로 데이터를 저장/처리하는 시스템
  • CRUD 중심 (insert, update, delete)
  • 짧고 빠른 쿼리, 동시성 중요, 정규화된 구조
  • 서비스 운영용 DB에 주로 사용 (ex 주문 생성, 회원가입, 결제 처리 등)

 

2) OLAP (Online Analytical Processing)

  • 데이터를 모아서 분석하는 시스템
  • 집계, 통계, 리포트 중심
  • 복잡한 쿼리 (group by, join 많음), 읽기 위주, 비정규화 구조 (스타 스키마 등)
  • 데이터 분석용 DB에 주로 사용 (ex 매출 분석, 사용자 행동 분석, BI 리포트 등)
구분 OLTP OLAP
목적 데이터 처리 데이터 분석
쿼리 짧고 빠름 길고 복잡
작업 insert/update 많음 select 많음
구조 정규화 비정규화
사용자 서비스/앱 분석가/BI

 

3. 피벗테이블 : PIVOT과 UNPIVOT


1) PIVOT

  • 행에 있던 값을 컬럼으로 펼치는 것
  • 롱 포맷 → 와이드 포맷
  • 집계함수(SUM, COUNT 등) 와 함께 사용
SELECT *
FROM (
    -- 1. 원본 데이터 (기준 테이블)
    SELECT 컬럼1, 컬럼2, 값컬럼
    FROM 테이블
)
PIVOT (
    집계함수(값컬럼)            -- 2. 반드시 집계함수
    FOR 컬럼2                  -- 3. 컬럼으로 바꿀 기준
    IN (값1, 값2, 값3)         -- 4. 실제 컬럼으로 만들 값들
);
위치 의미
FROM (subquery) 원본 데이터
집계함수 SUM, COUNT 등
FOR 컬럼 컬럼으로 펼칠 대상
IN (값들) 실제 만들어질 컬럼(홑따옴표 사)
SELECT *
FROM (
    SELECT 이름, 과목, 점수
    FROM 성적표
)
PIVOT (
    SUM(점수)
    FOR 과목
    IN ('수학' AS 수학, '영어' AS 영어)
);

 

2) Unpivot (언피벗)

  • 여러 개의 컬럼을 하나의 컬럼으로 모으는 것
  • 와이드 포맷 → 롱 포맷
SELECT *
FROM 테이블명
UNPIVOT (
    값컬럼
    FOR 컬럼이름
    IN (컬럼1, 컬럼2, 컬럼3)
);
위치 의미
값컬럼 기존 컬럼들의 값이 들어갈 컬럼
FOR 이름컬럼 기존 컬럼명이 들어갈 컬럼
IN (컬럼들) 행으로 펼칠 기존 컬럼들
SELECT *
FROM 성적표
UNPIVOT (
    점수
    FOR 과목
    IN (수학, 영어)
);

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기