<SUM + DECODE>
- 테이블의 ROW를 column으로 출력하려면 해당 함수를 사용해야함
▼ 최종 결과 출력물
▶ 일단 SUM을 제외하고 DECODE만 사용해서 부서 번호가 10이면 월급이 출력되게 해봄
쿼리를 살펴보면
▷ deptno가 10인 사람의 sal을 "10"이라고 불리는 column에 DECODE를 사용해서 출력해라
(나머지는 NULL이다)
▼ 다음 쿼리는 직업, 직업별 토탈 월급을 출력하는데 합쳐서 하나로 출력해보기
▷ 요거는 직업을 다 알고 있으니까 작성된 쿼리이지만 모르면 PL/SQL을 사용해야함.
PL/SQL은 https://velog.io/@bahar-j/PLSQL 참고
▼ 위에서 한 직업별로 토탈월급 출력하고나서 각 부서 번호별로 직업의 월급 분포를 보기 위해 추가해봄
▷ 분포도를 보면 ANALYST는 부서 20에 몰려있고, SALESMAN은 부서 30에 몰려있는 것을 확인할 수 있다.
<PIVOT>
- ROW를 column으로 출력하기 위한 또 다른 함수, 네 그 피벗
▼ 부서 번호, 부서 번호별 토탈 월급을 Pivot사용해서 출력해보기
위에서 했던 sum+DECODE를 이용했던 것보다 좀 더 간단하게 적을 수 있음.
▷ 부서 번호랑 토탈 월급을 출력하기 위해 필요한건 부서 번호랑 월급 뿐이니까
(2)FROM에서 그 2개만 불러왔던 것임.
(3)에서 deptno에서 10,20,30에 대한 것을 출력함
▼ 직업별로 나눠서 토탈 월급 출력해보기
▶ Pivot을 사용할 때는 FROM절에 괄호를 사용해서 특정 컬럼을 반드시 선택해줘야함
(다른 때 처럼 FROM emp 하면 에러남)
▷ 위에서는 싱글 쿼테이션마크 ( 작은 따옴표, ' ) 가 포함되어있으니 as를 사용하면 좀 더 깔끔하게 됨
<UNPIVOT>
- 위에서와 반대로 column을 ROW로 출력
▷ 일단 order2 라는 테이블을 만들어주고 values을 넣어줌 (만들어진 테이블)
▼ unpivot을 사용해서 컬럼을 로우로 출력해보겠음
▷ UNPIVOT은 pivot이랑 반대로 열을 행으로 출력함.
아이템을 unpivot하라고 했으니까 bicycle과 camera, notebook 총 3개였으니 3개의 열이었지만
unpivot으로 인해 행으로 출력되어 총 9개(이름 3명 * 아이템 3개) 로 '건수' 로 출력됨
▷ '건수'랑 '아이템'은 임의로 지정가능함(다른이름으로도)
물론 위에서 했던 것 처럼 값도 AS절을 사용해 변경 가능
▶ 만약 NULL이 포함되어있다면 unpivot 한 결과에서 출력이 되지 않음.
▷ 일단 NOTEBOOK을 NULL로 변경하고 다시 unpivot 해보겠음
▶ ▶ 원래 9개 행이 출력됐는데 8개 행밖에 나오지 않았음. NULL값이 제외됐기 때문에
▷ 만약 NULL도 나오고자한다면 INCLUDE NULLS를 사용
▶ 빈칸, NULL이 같이 출력되는 것을 확인할 수 있음.
'데이터베이스 > SQL' 카테고리의 다른 글
SQL 데이터분석함수 GROUPING SETS, ROW_NUMBER (0) | 2023.12.18 |
---|---|
SQL 데이터분석함수 SUM OVER, RATIO_TO_REPORT, ROLLUP, CUBE (0) | 2023.12.15 |
SQL NTILE,CUME_DIST,LISTAGG,LAG, LEAD (1) | 2023.11.29 |
SQL 순위출력 RANK, DENSE_RANK (0) | 2023.11.28 |
SQL 그룹함수 MAX, MIN, AVG, SUM, COUNT (0) | 2023.11.26 |