ORACLE - PIVOT, UNPIVOT
pivot, unpivot 을 알아보자
환경: 19C XE
엑셀에 있는 피벗과 똑같다.
(필자는 엑셀이 너무 어려워서 저 비유가 통하지 않았었다(쓰긴했지만))
피벗과 언피벗은 행렬과 그 반대의 역행렬의 관계이다
피벗은 행의 기준(ROW)을 열의 기준(COLUMN) 으로 변경한다
언피벗은 반대로 열의 기준(COLUMN) 을 행의 기준(ROW) 으로 변경한다
우선 피벗에 대해 먼저 알아보자
테이블과 샘플 데이터 먼저 넣자
피벗을 행의 관점을 열의 관점으로 변환한다고 했다.
현재 6개의 로우 들이 GRADE 칼럼에 값으로서 구분을 하고있다.
피벗은 이를 열의 관점으로 바꾸게 해준다.
문법은 다음과 같다
타겟 칼럼 GRADE 의 값을 열의 관점으로 NORMAL, GOLD, GUEST 칼럼으로 전개가 되었다.
문법 설명은 잠깐 참고. 다시한번 관찰하자
로우의 관점 에서 열의 관점으로 바뀌었다. 즉, 칼럼이 늘어났다
이정도로도 괜찮지만, 만약 여기서 요구사항이
GRADE 별 최대 지불액을 구해라 ...
이라면 from 절의 메인 테이블에서 user_id 를 제외한다음 작성하면 된다
문법을 그래도 보긴 봐야하는데
해석의 순서는 개인적으로 2 -> 3 -> 1 순서가 좋은것 같다
2: 열로 바꿀 기존 테이블의 칼럼을 명시하고
3: 그 해당 칼럼의 값의 경우의 수를 나열 해준다
1: 해당 경우의수에서 가져올 기준을 명시한다 최대, 갯수, 최소
이것도 좋다, 하지만 이전 쿼리 결과에서는 그래도 각 GRADE 별로 인원을 볼 수 있었다
예를들면 NORMAL 은 user1, user2, user3 총 3명이 있었다.
이렇게 기준 칼럼의 대상의 갯수도 다음처럼 작성하면 가져올 수 있다
위의 사진과 같이 pivot 안에 count 를 새어버리면, 각 칼럼을 대상으로 "칼럼명_COUNT" 형태로 자동으로 칼럼이 생긴다
이렇게하면 몇건에 대해서 MAX를 구했는지도 알 수 있다
unpivot 은 졸려서 다음에 이어서 올리겠다..
자, UNPIVOT에 대해서 알아보자
칼럼기준을 로우기준으로 바꾸는것이다.
예를 들기위해서 위에서 썻던 이 쿼리를 그대로 쓸 것 이다
칼럼이 늘어난것을 다시 확인할 수 있다.
자 이제, 언피벗으로 다시 되돌려보자
로우-----▶ 칼럼 -----▶ 로우
[피벗] [언피벗]
이렇게 되돌리면 원래대로 돌아갈 수 있다.
물론, 다른 테이블을 가지고 해도되는데, 예제가 막당히 없다 .
직관적이니 설명은 생략한다