[내일배움캠프 사전캠프] '25.07.29(화) / 사전캠프 3주차(2)

1. 오늘의 학습 키워드

  • (강의) 엑셀보다 쉽고 빠른 SQL 5주차

 

 

 

2. 오늘의 학습 내용 정리

[실습] 성별, 연령별 주문건수 Pivot Table 뷰 만들기 (나이는 10~59세 사이, 연령 순으로 내림차순)

  • 성별, 연령별 주문건수 집계하기
select c.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) order_count
from food_orders f inner join customers c on f.customer_id=c.customer_id
where c.age between 10 and 59
group by 1, 2

 

  • Pivot view 구조 만들기
select a.age,
       max(if(gender='male', order_count, 0)) male,      -- max : pivot table 생성시 필요
       max(if(gender='female', order_count, 0)) female
from 
(   -- 서브쿼리 ---
select c.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) order_count
from food_orders f inner join customers c on f.customer_id=c.customer_id
where c.age between 10 and 59
group by 1, 2
) a
group by 1
order by 1 desc   -- 나잇대 높은 것 부터 내림차순
💡 max()는 그룹 안에서 해당 조건에 맞는 하나의 값(최대값)을 선택해서 열(column)로 출력합니다.

[위 쿼리문의 결과값]

 

 

3. 학습하며 겪었던 문제점 & 에러

엑셀보다 쉽고 빠른 SQL 5주차 숙제 풀이 과정 중...

 

 - case when 조건문은 끝날 때까지 쉼표(,)를 넣지 않는다. [자꾸 쉼표(,)를 넣어서 계속해서 오류 발생]

 - then 다음에는 되도록 문자열 보다는 숫자를 넣는 편이 좋다. [SQL 로직 오류가 발생할 수 있음]

 - max() 함수를 사용하여 'pivot table'을 생성한다. 

select cuisine_type,
       max(if(age_group=10, cnt_order, 0)) "10대",
       max(if(age_group=20, cnt_order, 0)) "20대",
       max(if(age_group=30, cnt_order, 0)) "30대",
       max(if(age_group=40, cnt_order, 0)) "40대",
       max(if(age_group=50, cnt_order, 0)) "50대"
from
(    -- ⬇️ 서브쿼리 ⬇️ --
select f.cuisine_type,
       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_group,       
       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

 

 

 

4. 내일 학습 할 것은 무엇인지

 

데이터 분석가에게 코딩테스트가 필요할까? | 요즘IT

최근 개발자 교육 붐이 불면서, 이른바 ‘코딩’이라고 뭉뚱그려 표현하는 개발 기술들을 배우는 학원이 많아졌습니다. 이러한 인재들이 자신들이 배운 걸 확인하기 위해 한 번쯤 꼭 거치는 단

yozm.wishket.com

  • (SQL) 걷기반 퀘스트 ~ ing

 

끝.