
| 강의명 : 엑셀보다 쉽고 빠른 SQL
4강. 데이터 연결하기
1.여러번의 연산을 한번의 sql문으로
ex) "Subquery 문 안을 수정해서, 음식 준비시간이 25분보다 초과한 시간을 가져오기"
* subquery
select order_id, restaurant_name, if(over_time>0, over_time, 0) over_time
from
(
select order_id, restaurant_name, food_preparation_time-25 over_time
from food_orders
) a
ㄴ마지막 별칭 'a'가 없으면 오류 뜸 :FROM 절의 서브쿼리(테이블역할 시)는 반드시 별칭이 필요
ㄴalias : SQL에서 테이블이나 컬럼에 임시로 붙이는 이름
* segmentation : n. 분할
ex)"음식점의 평균 단가별 segmentation 을 진행하고, 그룹에 따라 수수료 연산하기.
(수수료 구간 :
5000원 미만 0.05%
5000원 이상 ~ 20,000원 미만 1%
20000원 이상 ~ 30,000원 미만:2%
30000원 이상 3%)"
select restaurant_name,
price_per_plate* ratio_of_add "수수료"
from
(
select restaurant_name,
case when price_per_plate<5000 then 0.005
when price_per_plate between 5000 and 19999 then 0.01
when price_per_plate between 20000 and 29999 then 0.02
else 0.03 end ratio_of_add,
price_per_plate
from
(
select restaurant_name, avg(price/quantity) price_per_plate
from food_orders
group by 1
) a
) b

* LEFT JOIN
ex)
select 조회 할 컬럼
from 테이블1 a left join 테이블2 b on a.공통컬럼명=b.공통컬럼명

* INNER JOIN
ex)
select 조회 할 컬럼
from 테이블1 a inner join 테이블2 b on a.공통컬럼명=b.공통컬럼명

어떤 테이블을 엮고 어떤 컬럼으로 묶어주느냐를 생각하자
ex)"한국 음식의 주문별 결제 수단과 수수료율을 조회하기"
(조회 컬럼 : 주문 번호, 식당 이름, 주문 가격, 결제 수단, 수수료율)
(결제 정보가 없는 경우도 포함하여 조회)
select a.order_id,
a.restaurant_name,
a.price,
b.pay_type,
b.vat
from food_orders a left join payments b on a. order_id =b. order_id
where cuisine_type='Korean'
ex)50세 이상 고객의 연령에 따라 경로 할인율을 적용하고, 음식 타입별로 원래 가격과 할인 적용 가격 합을 구하기 (조회 컬럼 : 음식 타입, 원래 가격, 할인 적용 가격)
할인 : (나이-50)* 0.005
* 고객 정보가 없는 경우도 포함하여 조회, 할인 금액이 큰 순서대로 정렬
Q. 식당별 평균 음식 주문 금액과 주문자의 평균 연령을 기반으로 Segmentation 하기
[조건]
평균 음식 주문 금액 기준 : 5,000 이하 / ~10,000 / ~30,000 / 30,000 초과
평균 연령 : ~ 20대 / 30대 / 40대 / 50대 이상
두 테이블 모두에 데이터가 있는 경우만 조회, 식당 이름 순으로 오름차순 정렬
A1.