1. 핵심 원리
PIVOT는 SQL에서 행 데이터를 열 데이터로 변환하는 기능입니다. 주로 집계 함수와 함께 사용되어 그룹별로 데이터를 요약하여 표시할 수 있습니다. 예를 들어, 부서 번호별로 급여를 열로 표시하고자 할 때 유용합니다.
2. 실무에서 쓰이는 이유
실무에서 PIVOT는 다양한 데이터 집계를 더 명확하게 표현하기 위해 사용됩니다. 일반적으로 보고서나 대시보드를 작성할 때, 행의 데이터를 열로 변환함으로써 데이터를 시각적으로 쉽게 분석할 수 있도록 돕습니다.
3. 실무에서 구체적으로 사용되는 상황과 예상 상황 예측
- 상황 예시 1: 월별로 각 제품군의 판매량을 보고할 때, 월을 행으로, 제품군을 열로 배치하여 월별 제품군별 판매 데이터를 한눈에 볼 수 있도록 정리합니다.
- 상황 예시 2: 부서별로 직원의 평균 급여를 보고할 때, 부서명을 행으로, 각 직군을 열로 배치하여 부서별 직군별 평균 급여를 비교 분석합니다.
4. 연습 문제
EMP 테이블에서 부서 번호별 총 급여를 PIVOT을 사용하여 열로 출력해보세요.
SELECT *
FROM (SELECT deptno, sal FROM emp)
PIVOT (SUM(sal) FOR deptno IN (10, 20, 30));
5. 연습문제 해답
위에 제공된 SQL 문이 연습문제에 대한 답입니다. 해당 SQL 문은 EMP 테이블에서 DEPTNO를 기준으로 각 부서의 총 급여를 출력합니다.
6. 응용 문제
각 직업별로 총 급여를 PIVOT을 사용하여 열로 출력해보세요.
SELECT *
FROM (SELECT job, sal FROM emp)
PIVOT (SUM(sal) FOR job IN ('ANALYST', 'CLERK', 'MANAGER', 'SALESMAN'));
7. 응용문제 해답
응용 문제에 대한 SQL 답안은 위와 같습니다. 이 SQL 문은 EMP 테이블에서 JOB을 기준으로 각 직업의 총 급여를 출력합니다.
8. 전자상거래 업계에서 쓰일 수 있는 경우 2가지 및 SQL 코드
- 경우 1: 카테고리별 월별 매출 집계
- 상황: 전자상거래 사이트에서 각 제품 카테고리의 월별 매출을 보고하고자 할 때.
- SQL 코드:
SELECT * FROM (SELECT category, EXTRACT(MONTH FROM sale_date) AS month, SUM(sales) AS total_sales FROM sales_data GROUP BY category, EXTRACT(MONTH FROM sale_date)) PIVOT (SUM(total_sales) FOR month IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12));
- 경우 2: 고객 등급별 제품 구매 패턴 분석
- 상황: 고객 등급별로 특정 기간 동안 구매한 주요 제품군을 비교하고자 할 때.
- SQL 코드:
sql SELECT * FROM (SELECT customer_tier, product_category, COUNT(*) AS purchase_count FROM orders_data WHERE purchase_date BETWEEN '2023-01-01' AND '2023-12-31' GROUP BY customer_tier, product_category) PIVOT (SUM(purchase_count) FOR product_category IN ('Electronics', 'Clothing', 'Home Appliances', 'Books'));
9. SQL 코드 시각화 예시 테이블
첫 번째 경우 (카테고리별 월별 매출 집계)
Category | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Electronics | 5000 | 7000 | 6500 | 7200 | 8000 | 9000 | 7500 | 6800 | 7100 | 8500 | 9200 | 9500 |
Clothing | 3000 | 3200 | 3300 | 3400 | 3500 | 3700 | 3600 | 3550 | 3700 | 4000 | 4200 | 4400 |
Home Appliances | 4000 | 4200 | 4100 | 4300 | 4500 | 4800 | 4700 | 4900 | 5200 | 5400 | 5600 | 5900 |
두 번째 경우 (고객 등급별 제품 구매 패턴 분석)
Customer Tier | Electronics | Clothing | Home Appliances | Books |
---|---|---|---|---|
Silver | 120 | 80 | 60 | 50 |
Gold | 200 | 150 | 130 | 110 |
Platinum | 300 | 220 | 210 | 180 |