본문 바로가기
카테고리 없음

[TIL 0628] 스파르타코딩클럽<4주차<SQL 강의 과제

by 용스토리랜드 2024. 6. 28.

식당별 평균 음식 주문 금액과 주문자의 평균 연령을 기반으로 Segmentation 하기

✅지시사항

  • 평균 음식 주문 금액 기준 : 5,000 / 10,000 / 30,000 / 30,000 초과
  • 평균 연령 : ~ 20대 / 30대 / 40대 / 50대 이상
  • 두 테이블 모두에 데이터가 있는 경우만 조회, 식당 이름 순으로 오름차순 정렬

✅풀이

  • SUBQUERY와 INNER JOIN을 통해 두 테이블의 customer_id를 기준으로 join 한 테이블을 생성! 
  • 식당별 집계를 하기 위해 GROUP BY를 활용 -> 식당명, 식당 별 평균 가격, 식당 별 평균 나이를 추출
  • 주 쿼리 (바깥 쪽 SELECT 문을 통해 식당명과 세분화된 그룹명을 생성) (CASE WHEN을 통해 지시사항 수행)
select new.restaurant_name, 
		case when avg_price <= 5000 then 'price_group1'
			 when avg_price > 5000 and avg_price <= 10000 then 'price_group2'
			 when avg_price > 10000 and avg_price <= 30000 then 'price_group3'
			 when avg_price > 30000 then 'price_group4' 
			 end price_group,
		case when avg_age <= 30 then 'age_group1'
			 when avg_age > 30 and avg_age <= 40 then 'age_group2'
			 when avg_age > 40 and avg_age <= 50 then 'age_group3'
			 when avg_age > 50 then 'age_group4'
			 end age_group
from
(
select restaurant_name, avg(price) avg_price, avg(age) avg_age
from food_orders f inner join customers c on f.customer_id = c.customer_id 
group by restaurant_name) as new
order by restaurant_name
QUERY 를 작성할 때는 항상 실행 구조를 생각한다 ! 
인라인 뷰(INLINE VIEW)를 통해서 새로운 테이블을 만든 후, 추가적인 쿼리를 통해 원하는 결과를 얻는 것이 효율적일 때가 많다 !
반응형