- 4주차 (1/2)
SUBQUERY(서브쿼리)가 필요한 경우
서브쿼리 문의 기본 구조
SELECT column1, special_column
FROM
( --- subquery ---
SELECT column1, column2 special_column
FROM table1
) a
가. 음식점의 지역과 평균 배달시간으로 SEGMENTATION 하기
가-1. QUERY 적기 전 흐름 정리하기
#어떤 테이블에서 데이터를 뽑을 것인가 > 주문테이블
#어떤 컬럼을 이용할 것인가 > 식당 이름, 주소, 배달 시간
#어떤 조건을 지정해야 하는가 > 없음
#어떤 함수(수식)을 이용해야 하는가 > 평균 구하기, 조건문, 연산, 문자 추출
가-2. 구문으로 만들기
#어떤 테이블에서 데이터를 뽑을 것인가 > FROM food_orders
#어떤 컬럼을 이용할 것인가 > restaurant_name, addr, delivery_time
#어떤 조건을 지정해야 하는가 > 없음
#어떤 함수(수식)을 이용해야 하는가 > AVG(delivery_time), SUBSTR(addr,1,2), CASE, GROUP BY
가-3. 전체 구조로 합치기
SELECT restaurant_name,
sido,
CASE WHEN avg_time<=20 THEN '<=20'
WHEN avg_time>20 AND avg_time <=30 THEN '20<x<=30'
WHEN avg_time>30 THEN '>30'
END time_segment
FROM
(
SELECT restaurant_name,
SUBSTR(addr, 1, 2) sido,
AVG(delivery_time) avg_time
FROM food_orders
GROUP BY 1, 2
) a
가. 음식 타입별, 지역별 총 주문수량과 음식점 수를 연산하고, 주문 수량과 음식점 수 별 수수료율 산정
+) 할인조건:
(수량 5개 이하 - 10%, 수량 15개 초과, 총 주문금액 300000 이상 - 0.5%, 이 외에는 일괄 1%)
가-1. QUERY 적기 전 흐름 정리하기
#어떤 테이블에서 데이터를 뽑을 것인가 > 주문테이블
#어떤 컬럼을 이용할 것인가 > 음식점 이름, 주문 수량, 주문 금액
#어떤 조건을 지정해야 하는가 > 없음
#어떤 함수(수식)을 이용해야 하는가 > 합계 구하기, 조건문
가-2. 구문으로 만들기
#어떤 테이블에서 데이터를 뽑을 것인가 > FROM food_orders
#어떤 컬럼을 이용할 것인가 > restaurant_name, quantity, price
#어떤 조건을 지정해야 하는가 > 없음
#어떤 함수(수식)을 이용해야 하는가 > SUM(quantity), SUM(price), CASE
가-3. 전체 구조로 합치기
SELECT restaurant_name,
CASE WHEN sum_of_quantity<=5 THEN 0.1
WHEN sum_of_quantity>15 AND sum_of_price>=300000 THEN 0.005
ELSE 0.01
END ratio_of_add
FROM
(
SELECT restaurant_name,
SUM(quantity) sum_of_quantity,
SUM(price) sum_of_price
FROM food_orders
GROUP BY 1
) a
서브쿼리를 작성하는 것이 얼핏 복잡해보이지만,
쿼리를 잘 구성해서 순서대로 작성하다보면 크게 어렵지 않다.
연습하자!