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
반응형
'Web Frontend > Database' 카테고리의 다른 글
[SQL] 음수, 양수 확인하기 - SIGN 함수 (0) | 2025.03.05 |
---|---|
[SQL] DECODE로 대체값 넣어서 출력하기 (0) | 2025.03.05 |
[SQL] 트랜잭션 이해하기 - ACID 원칙 (0) | 2025.03.05 |
[SQL] 데이터 정렬하는 법 - ORDER BY절 활용하기 (0) | 2025.03.05 |
[SQL] 오름차순(ASC)과 내림차순(DESC) 정렬 순서 (0) | 2025.03.05 |