복잡한 쿼리 (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 (수학, 영어)
);