[SQL] 피벗 테이블 뷰 만들기

ch.2·2024년 7월 9일

SQL

목록 보기
7/9
post-thumbnail

방법

SQL로 피벗 테이블 뷰를 만들 때의 구조

  1. 먼저 베이스 데이터를 만든다.
  2. 이 베이스 데이터를 이용하여 피벗 뷰를 만든다.

이후의 과정

  1. 베이스 데이터는 서브쿼리문으로 사용한다.
  2. 본쿼리에서 select문을 작성한다.
    • 첫 번째 컬럼은 피벗테이블의 집계기준이 된다. (행축으로 갈 데이터)
    • 이후 컬럼들은 if문을 사용하여 각각의 조건을 명시해주는 구분 컬럼이 된다.
  3. 피벗 뷰를 깔끔하게 만들기 위하여 구분 컬럼을 max로 묶어준다.
  4. max라는 집계함수를 사용했으므로 group by문을 작성해야 한다.

예제

food_orders 테이블, customers 테이블 이용
성별, 연령별 주문건수 Pivot Table 뷰 만들기 (나이는 10~59세 사이, 연령 순으로 내림차순)

베이스 데이터 만들기

select gender,
		case when age between 10 and 19 then 10
			 when age between 20 and 29 then 20
			 when age between 30 and 39 then 30
			 when age between 40 and 49 then 40
			 when age between 50 and 59 then 50 end age,
			 count(1) cnt_order
from food_orders f inner join customers c on f.customer_id=c.customer_id
where age between 10 and 59
group by 1, 2

성별, 연령별 주문건수를 알기 위한 쿼리문을 작성한다.
연령별 조건을 구하기 위해 case when 구문을 사용하고 where 절을 작성했다.

피벗 뷰 만들기

select age, 
		max(if(gender='male', cnt_order, 0)) "male",
		max(if(gender='female', cnt_order,0)) "female"
from
(
select gender,
		case when age between 10 and 19 then 10
			 when age between 20 and 29 then 20
			 when age between 30 and 39 then 30
			 when age between 40 and 49 then 40
			 when age between 50 and 59 then 50 end age,
			 count(1) cnt_order
from food_orders f inner join customers c on f.customer_id=c.customer_id
where age between 10 and 59
group by 1, 2
) a
group by 1
order by 1 desc
;
  • 베이스 데이터를 서브쿼리문으로 넣어주고 select 문에는 행축인 age를 작성한다.
  • 이후 if문을 이용하여 성별별 주문 건수 컬럼을 작성하고 max로 묶어준다.
  • max를 사용했으니 group by 문을 작성한다.
  • 또 다른 조건인 연령 순으로 내림차순 조건은 order by 구문을 이용한다.

tip!!

출력된 피벗 뷰를 사용할 때엔 드래그 복사 해서 사용하면 된다.

profile
데이터 분석 공부중

0개의 댓글