Web Frontend/Database

[SQL] 와이드한 너비로 결과값을 출력하려면 - PIVOT

챙v 2025. 3. 6. 16:15
728x90
반응형

PIVOT으로 행 열 변환해서 출력하기

PIVOT은 SQL에서 행(row)을 열(column)로 변환하는 데 사용되는 연산자입니다.
주로 데이터 요약 및 분석에 유용하며, 쿼리 결과를 회전시켜 데이터를 다른 방식으로 나타낼 때 사용됩니다.
PIVOT은 주로 다양한 값을 하나의 행으로 결합하고, 데이터 분석을 쉽게 만들기 위해 사용됩니다.

PIVOT 구문

PIVOT 구문의 기본 구조

SELECT 컬럼1, 컬럼2, ... 
FROM (
    SELECT 행을변환할컬럼, 집계컬럼
    FROM 테이블명
) 
PIVOT (
    집계함수(집계컬럼)
    FOR 행을변환할컬럼 IN (변환할값1, 변환할값2, ...)
);

 

  • 행을변환할컬럼: 로 변환할 기준이 되는 컬럼.
  • 집계컬럼: 집계 함수가 적용될 컬럼입니다. 예를 들어, SUM()을 사용하여 합계를 계산할 수 있습니다.
  • 집계함수: SUM(), AVG(), COUNT() 등의 집계 함수입니다.
  • FOR 행을변환할컬럼: 열로 변환될 값을 지정합니다.

PIVOT 예시

📌 1. 월별 매출 합계 조회

예를 들어, 매출 데이터를 월별로 집계하여 각 월을 열로 변환하는 경우를 생각해 보겠습니다.
매출 컬럼을 월별로 변환하여 표시하는 쿼리를 작성해 보겠습니다.

매출 테이블 예시

매출액
1월 1000
2월 1200
3월 1500
1월 2000
2월 1700

PIVOT 으로 달을 컬럼으로 출력하기

SELECT *
FROM (
    SELECT 월, 매출액
    FROM 매출
)
PIVOT (
    SUM(매출액)
    FOR 월 IN ('1월', '2월', '3월')
);

결과 

1월 2월 3월
3000 2900 1500
  • PIVOT 구문을 사용하여 월을 열로 변환하고, 각 월의 매출 합계를 구했습니다.
  • SUM(매출액)을 사용하여 각 월의 매출 합계를 계산하고, 각 월을 열로 나열한 결과를 확인할 수 있습니다.

📌 2. 성적 데이터를 과목별로 변환

학생들의 성적 데이터를 과목별로 변환하는 예시입니다.
각 학생의 성적을 과목별 열로 변환하여 보여줄 수 있습니다.

성적 테이블 예시

학생 ID 과목 성적
1 수학 85
1 영어 90
2 수학 95
2 영어 88

PIVOT 으로 과목을 컬럼으로 출력하기

SELECT *
FROM (
    SELECT 학생ID, 과목, 성적
    FROM 성적
)
PIVOT (
    MAX(성적)
    FOR 과목 IN ('수학', '영어')
);

결과 

학생 ID 수학 영어
1 85 90
2 95 88
  • MAX(성적)을 사용하여 각 학생의 과목별 성적을 가져옵니다.
  • PIVOT 구문을 사용하여 각 과목을 열로 변환합니다.

PIVOT을 사용하지 않고 같은 결과 얻기

PIVOT을 사용하지 않고도 CASE WHEN 구문을 사용하여 같은 결과를 얻을 수 있습니다.

SELECT 학생ID,
       MAX(CASE WHEN 과목 = '수학' THEN 성적 END) AS 수학,
       MAX(CASE WHEN 과목 = '영어' THEN 성적 END) AS 영어
FROM 성적
GROUP BY 학생ID;
  • CASE WHEN을 사용하여 각 과목에 대해 성적을 조건으로 처리한 후 GROUP BY로 학생별로 그룹화하여 결과를 만듭니다.

PIVOT 사용 시 주의사항

  • IN 절의 값 순서는 반드시 고정되어야 하며, 동적으로 값이 변할 수 없습니다.
  • PIVOT은 일반적으로 고정된 값을 사용할 때 유용합니다. 만약 행 값이 동적으로 변할 가능성이 있다면 동적 SQL을 사용해야 할 수 있습니다.

마무리

  • PIVOT은 행을 열로 변환하여 데이터를 요약하거나 분석할 때 유용한 SQL 기능입니다.
  • IN 절을 사용하여 변환할 값을 지정하고, 집계 함수를 사용하여 각 그룹의 값을 계산합니다.
  • CASE WHEN과 GROUP BY를 활용하여 PIVOT을 대체할 수 있습니다.
728x90
반응형