● 데이터의 구조
1) LONG DATA(Tidy data)
- 하나의 속성이 하나의 컬럼으로 정의되어 값들이 여러 행으로 쌓이는 구조
- RDBMS 의 테이블 설계 방식
- 다른 테이블과의 조인 연산이 가능한 구조
●● LONG DATA
2) WIDE DATA(Cross table)
- 행과 컬럼에 유의미한 정보 전달을 목적으로 작성하는 교차표
- 하나의 속성값이 여러 컬럼으로 분리되어 표현
- RDBMS 에서 WIDE 형식으로 테이블 설계시 값이 추가될 때 마다 컬럼이 추가돼야 하므로 비효율적
- 다른 테이블과의 조인 연산이 불가함
- 주로 데이터를 요약할 목적으로 사용
●● WIDE DATA
☞ 컬럼의 정보는 부서번호로, 하나의 관찰대상(속성)을 한 컬럼으로 정의하지 않고 값의 종류별로 컬럼을
분리하였음
● 데이터 구조 변경
1) PIVOT : LONG => WIDE
2) UNPIVOT : WIDE => LONG
● PIVOT
- 교차표를 만드는 기능
- STACK 컬럼, UNSTACK 컬럼, VALUE 컬럼의 정의가 중요!
- FROM 절에 STACK, UNSTACK, VALUE 컬럼명만 정의 필요(필요 시 서브쿼리 사용하여 필요 컬럼 제한)
- PIVOT 절에 UNSTACK, VALUE 컬럼명 정의
- PIVOT 절 IN 연산자에 UNSTACK 컬럼 값을 정의
- FROM 절에 선언된 컬럼중 PIVOT 절에서 선언한 VALUE 컬럼, UNSTACK 컬럼을 제외한 모든 컬럼은
STACK 컬럼이 됨
** 문법
※ 반드시 FROM 절에 STACK 컬럼, UNSTACK 컬럼, VALUE 컬럼 모두 명시!
예제) EMP 테이블에서 아래와 같이 JOB 별 DEPTNO 별 도수(COUNT) 출력
※ 주의 : 이 때 FROM 절 서브쿼리 안에 JOB 이 없으면 아래와 같이 그냥 부서별로의 도수가 출력됨
※ 주의 : FROM 절에 서브쿼리로 컬럼을 제한하지 않으면 STACK 컬럼이 많아짐!!
☞ FROM 절에 서브쿼리로 필요한 컬럼만 정의하지 않으면 EMP 테이블의 모든 컬럼 중 PIVOT 절에
선언된 EMPNO, DEPTNO 컬럼을 제외한 모든 컬럼이 STACK 처리 됨
예제) 다음의 테이블에서 성별, 연도별 구매량 총 합을 표현하는 교차표 작성
● UNPIVOT
- WIDE 데이터를 LONG 데이터로 변경하는 문법
- STACK 컬럼 : 이미 UNSTACK 되어 있는 여러 컬럼을 하나의 컬럼으로 STACK 시 새로 만들 컬럼이름(사 용자 정의)
- VALUE 컬럼 : 교차표에서 셀 자리(VALUE)값을 하나의 컬럼으로 표현하고자 할 때 새로 만들 컬럼명(사 용자 정의)
- 값 1, 값 2... : 실제 UNSTACK 되어 있는 컬럼이름들
** 문법
예제) 위 UNSTACK_TEXT PIVOT 결과가 STACK_TEST 테이블에 저장되어 있을 때, 다시 STACK_TEST 테이블 값을 UNSTACK_TEST 형태로 변경(STACK 처리)
☞ IN 뒤에 값은 UNSTACK 데이터의 컬럼명이 숫자이지만 컬럼명은 문자로 저장되므로 쌍따움표 전달 필요!
예제) 아래 테이블 생성 후 stack 처리
'MySQLD 자격증 공부' 카테고리의 다른 글
함수의 종류 (암기용) (0) | 2024.08.19 |
---|---|
2 - 16 (0) | 2024.08.18 |
2 - 14 (0) | 2024.08.18 |
2 - 13 (0) | 2024.08.18 |
2 - 12 (0) | 2024.08.18 |