481. 피버팅 (Pivoting)과 크로스탭 보고서

⚠️ 이 문서는 데이터베이스에서 세로로 길게 쭉쭉 늘어진 데이터(Row)를, 사람이 한눈에 읽기 편하도록 축(Axis)을 90도 비틀어서 가로(Column)로 쫙 펼쳐 보여주는 다차원 분석의 꽃, '피버팅' 연산을 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 피버팅(Pivoting)은 단어 뜻 그대로 '축을 회전시킨다'는 뜻이다. 행(Row)으로 나열된 데이터를 열(Column)로 변환하거나 그 반대로 변환하는 OLAP 연산이다.
  2. 크로스탭(Crosstab): 피버팅의 결과물로 만들어지는 교차 표(Cross Tabulation)를 말한다. 우리가 엑셀에서 흔히 쓰는 '피벗 테이블(Pivot Table)'이 바로 이것이다.
  3. 가치: 컴퓨터는 세로로 긴 데이터를 좋아하지만, 사람은 가로세로가 예쁘게 교차된 표를 좋아한다. 피버팅은 기계의 데이터를 인간의 보고서로 통역해 주는 가장 강력한 도구다.

Ⅰ. 개요: 목이 아픈 보고서 (Context & Necessity)

"연도별, 지역별 매출 좀 뽑아와 봐!" 막내 개발자가 DB에서 GROUP BY 연도, 지역으로 쿼리를 짜서 사장님께 가져갔다.

[막내의 보고서 (Row 형태)]

연도지역매출
2025서울100
2025부산50
2026서울200
2026부산80

사장님은 표를 보고 화를 낸다. "이걸 언제 위아래로 비교하고 있어? 2025년이랑 2026년 서울 매출을 한눈에 보게 옆으로 붙여놔!" 이때 필요한 것이 바로 **피버팅(Pivoting)**이다. 연도나 지역 중 하나를 골라 '가로축(Column)'으로 눕혀버리면 된다.

[피버팅 된 보고서 (크로스탭 형태)]

지역2025년2026년
서울100200
부산5080

📢 섹션 요약 비유: 피버팅은 **'블라인드 손잡이 돌리기'**와 같습니다. 세로로 닫혀있던 블라인드를 손잡이(축)를 돌려서 가로로 활짝 펴면, 바깥 풍경(인사이트)이 한눈에 들어오는 것과 똑같은 원리입니다.


Ⅱ. 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줄 비유 설명

  1. 로봇 장난감이 있는데, 로봇의 앞모습만 보다가 옆모습이나 뒷모습이 보고 싶어질 때가 있죠?
  2. 그럴 때 손으로 로봇을 빙글 돌려서 다른 각도로 쳐다보는 행동이 바로 피버팅(Pivoting)이에요.
  3. 데이터도 큐브(주사위)처럼 생겨서, 내가 보고 싶은 면(예: 연도와 매출)이 보이게 주사위를 이리저리 돌려보는 마법이랍니다!