SQL#4-1

codataffee·2024년 4월 12일
0

SQL

목록 보기
4/19
post-thumbnail

#SQL

  • 문자 포맷 변경, 조건문 복습


- 4주차 (1/2)

1. 여러 번의 연산을 한 번의 SQL문으로 수행하기

  • SUBQUERY(서브쿼리)가 필요한 경우

  • 서브쿼리 문의 기본 구조

SELECT column1, special_column
FROM
    ( --- subquery ---
    SELECT column1, column2 special_column
    FROM table1
    ) a

2. USER SEGMENTATION 과 조건별 수수료를 SUBQUERY로 결합 (실습)

가. 음식점의 지역과 평균 배달시간으로 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


2. 복잡한 연산을 SUBQUERY로 수행 (실습)

가. 음식 타입별, 지역별 총 주문수량과 음식점 수를 연산하고, 주문 수량과 음식점 수 별 수수료율 산정
+) 할인조건:
(수량 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


서브쿼리를 작성하는 것이 얼핏 복잡해보이지만,
쿼리를 잘 구성해서 순서대로 작성하다보면 크게 어렵지 않다.
연습하자!

profile
커피 좋아하는 데이터 꿈나무

0개의 댓글

관련 채용 정보