481. 피버팅 (Pivoting)과 크로스탭 보고서
⚠️ 이 문서는 데이터베이스에서 세로로 길게 쭉쭉 늘어진 데이터(Row)를, 사람이 한눈에 읽기 편하도록 축(Axis)을 90도 비틀어서 가로(Column)로 쫙 펼쳐 보여주는 다차원 분석의 꽃, '피버팅' 연산을 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: 피버팅(Pivoting)은 단어 뜻 그대로 '축을 회전시킨다'는 뜻이다. 행(Row)으로 나열된 데이터를 열(Column)로 변환하거나 그 반대로 변환하는 OLAP 연산이다.
- 크로스탭(Crosstab): 피버팅의 결과물로 만들어지는 교차 표(Cross Tabulation)를 말한다. 우리가 엑셀에서 흔히 쓰는 '피벗 테이블(Pivot Table)'이 바로 이것이다.
- 가치: 컴퓨터는 세로로 긴 데이터를 좋아하지만, 사람은 가로세로가 예쁘게 교차된 표를 좋아한다. 피버팅은 기계의 데이터를 인간의 보고서로 통역해 주는 가장 강력한 도구다.
Ⅰ. 개요: 목이 아픈 보고서 (Context & Necessity)
"연도별, 지역별 매출 좀 뽑아와 봐!"
막내 개발자가 DB에서 GROUP BY 연도, 지역으로 쿼리를 짜서 사장님께 가져갔다.
[막내의 보고서 (Row 형태)]
| 연도 | 지역 | 매출 |
|---|---|---|
| 2025 | 서울 | 100 |
| 2025 | 부산 | 50 |
| 2026 | 서울 | 200 |
| 2026 | 부산 | 80 |
사장님은 표를 보고 화를 낸다. "이걸 언제 위아래로 비교하고 있어? 2025년이랑 2026년 서울 매출을 한눈에 보게 옆으로 붙여놔!" 이때 필요한 것이 바로 **피버팅(Pivoting)**이다. 연도나 지역 중 하나를 골라 '가로축(Column)'으로 눕혀버리면 된다.
[피버팅 된 보고서 (크로스탭 형태)]
| 지역 | 2025년 | 2026년 |
|---|---|---|
| 서울 | 100 | 200 |
| 부산 | 50 | 80 |
📢 섹션 요약 비유: 피버팅은 **'블라인드 손잡이 돌리기'**와 같습니다. 세로로 닫혀있던 블라인드를 손잡이(축)를 돌려서 가로로 활짝 펴면, 바깥 풍경(인사이트)이 한눈에 들어오는 것과 똑같은 원리입니다.
Ⅱ. OLAP에서의 피버팅 (다차원 큐브 회전) ★
스타 스키마(477번 문서)로 만든 3차원 데이터 큐브에서도 피버팅은 매우 중요하다.
- 큐브의 3개 축이
[시간],[지역],[상품]이라고 치자. - 내 모니터 화면은 2차원(평면)이다. 그래서 나는 큐브의 '한쪽 면'만 볼 수 있다.
- 현재
[시간]과[지역]면을 보고 있다면, 마우스로 큐브를 빙글 돌려서(Pivoting)[지역]과[상품]면으로 화면을 휙 전환하는 행위 자체가 모두 피버팅 연산에 속한다.
Ⅲ. 실무 쿼리: SQL로 피벗 테이블 만들기
엑셀에서는 마우스 드래그 한 번이면 되지만, SQL로 피버팅을 하려면 CASE WHEN의 지옥이 펼쳐진다. (최근에는 PIVOT이라는 전용 함수가 생겨서 편해졌다.)
전통적인 방식 (CASE WHEN 활용)
SELECT 지역,
SUM(CASE WHEN 연도 = '2025' THEN 매출 ELSE 0 END) AS "2025년",
SUM(CASE WHEN 연도 = '2026' THEN 매출 ELSE 0 END) AS "2026년"
FROM 매출테이블
GROUP BY 지역;
이 쿼리를 보면 피버팅의 본질이 보인다. 세로(Row)에 있던 '2025'라는 값을, 강제로 가로(Column) 이름으로 멱살 잡고 끌어올리는 것이다.
현대적인 방식 (PIVOT 함수 활용 - Oracle, SQL Server 등)
SELECT * FROM 매출테이블
PIVOT (
SUM(매출) FOR 연도 IN ('2025', '2026')
);
┌──────────────────────────────────────────────────────────────┐
│ 피버팅 (Pivoting)과 역피버팅 (Unpivoting) 시각화 │
├──────────────────────────────────────────────────────────────┤
│ │
│ [ 롱 폼 (Long Form) - 기계가 좋아하는 모양 ] │
│ 연도 │ 과목 │ 점수 (PIVOT) [ 와이드 폼 (Wide Form) ]│
│ 2026 │ 수학 │ 90 ──────────────▶ 연도 │ 수학 │ 영어 │
│ 2026 │ 영어 │ 80 ◀────────────── 2026 │ 90 │ 80 │
│ 2027 │ 수학 │ 95 (UNPIVOT) 2027 │ 95 │ 85 │
│ 2027 │ 영어 │ 85 (인간이 좋아하는 모양) │
│ │
│ ★ 특징: UNPIVOT은 가로로 뚱뚱하게 퍼진 엑셀 파일을 다시 DB에 넣기 좋게 │
│ 세로로 길쭉하게 풀어헤치는(정규화) 연산이다. │
└──────────────────────────────────────────────────────────────┘
Ⅳ. 결론
"데이터를 읽는 관점(Perspective)을 전환하라." 피버팅은 데이터의 값이나 본질을 바꾸는 연산이 아니다. 단순히 데이터를 '어떤 각도에서 쳐다볼 것인가'를 결정하는 프레젠테이션 기술이다. 하지만 이 사소한 축의 회전 하나가 경영진에게는 막힌 속을 뻥 뚫어주는 거대한 인사이트의 출발점이 된다. 백엔드 개발자는 원본 데이터(Long Form)를 유지하면서도, 프론트엔드나 클라이언트가 요구하는 형태(Wide Form)로 데이터를 우아하게 비틀어줄 줄 아는 피버팅 쿼리 작성 능력을 갖추어야 한다.
📌 관련 개념 맵
- 관련 OLAP 연산: Slicing / Dicing (480번 문서), Drill-down / Roll-up (479번 문서)
- 결과물 형태: Crosstab (크로스탭), Contingency Table (분할표)
- SQL 키워드:
PIVOT,UNPIVOT,DECODE,CASE WHEN - 활용처: BI 대시보드 렌더링, 엑셀 다운로드 포맷 생성
👶 어린이를 위한 3줄 비유 설명
- 로봇 장난감이 있는데, 로봇의 앞모습만 보다가 옆모습이나 뒷모습이 보고 싶어질 때가 있죠?
- 그럴 때 손으로 로봇을 빙글 돌려서 다른 각도로 쳐다보는 행동이 바로 피버팅(Pivoting)이에요.
- 데이터도 큐브(주사위)처럼 생겨서, 내가 보고 싶은 면(예: 연도와 매출)이 보이게 주사위를 이리저리 돌려보는 마법이랍니다!