데이터

[SQL] 공부하다 깨달은 (3)

Ddani_ng 2025. 4. 6. 17:38

문제

[실습] 음식 타입별 총 주문수량과 음식점 수를 연산하고, 주문수량과 음식점수 별 수수료율을 산정하기

  • (음식점수 5개 이상, 주문수 30개 이상 → 수수료 0.5% 음식점수 5개 이상, 주문수 30개 미만 → 수수료 0.8% 음식점수 5개 미만, 주문수 30개 이상 → 수수료 1% 음식점수 5개 미만, 주문수 30개 미만 → 수수로 2%)

1차 문제 풀이 시도

 

음식 타입별 총 음식점 수를 계산하는 것 까진 성공한 듯 했다. 그러나 음식 타입별 총 주문수량이 (sum(quantity)) 가 뭔가... 뭔가 오류 난거같다. 그래서 고민해보다가 내가 음식점 수를 먼저 구한 탓이 아닐까 싶었다.

 

그래서 다시 이번엔 총주문 수령 부터 구한 후 총주문 수량 쿼리를 서브쿼리로 뺀 후, 음식점 수를 구하는 방향으로 가보기로했다. 그 다음에 수수료 산정하고, 수수료 계산하면 되지 않을까.

 

자 다시해보자.

 

 


2차 문제풀이 시도

select sido,cuisine_type,sum_quan,count_reata,substr(avg_price,1,5),
case when sum_quan >=5 and count_reata>=30 then 0.005
when sum_quan >=5 and count_reata<30 then 0.008
when sum_quan <5 and count_reata>=30 then 0.01
when sum_quan <5 and count_reata<30 then 0.02
end fee
from
(select cuisine_type,avg(price) avg_price,substr(addr,1,2) sido,
sum(quantity) sum_quan,
count(distinct restaurant_name) count_reata
from food_orders
group by 1
)a

 

풀었다! 풀어보니 총주문 수량과 음식점 수는 한번에 첫 쿼리에서 계산할 수 있더라. 여기서 내가 간과한 점은 겹치는 음식점 명이 있을 수 있으니 distict를 써서 겹치는 음식점 명이 없도록 카운트 해야한다는 점이었다.