2025 내일배움캠프 QAQC_2기

2025 내일배움캠프 QAQC_2기 4일차

mingdoremi 2025. 5. 2. 18:16

안녕하세요오~~ 오늘은 내일배움캠프 사전캠프 4일차!!

오늘은 SQL강의 4주차를 완강하는 것이 목표입니다! 파이팅!!

 

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

Subquery가 필요한 경우

  • 여러 번의 연산을 수행해야 할 때

복잡하고 긴 Query문을 하나하나 단계별로 쉽고 간단하게 가능합니다!

 

▷ 수수료를 부과할 수 있는 시간을 구하고

▷ 구해진 시간에 주문 금액별로 가중치를 주고

▷ 가중치를 적용한 결과로 최종 예상 배달비를 계산할 때

  • 조건문에 연산 결과를 사용해야 할 때

연산 결과 따로 case문 따로!

 

▷ 음식 타입별 평균 음식 주문금액 따라 음식비 상/중/하 를 나누고 싶을 때

  • 조건에 Query 결과를 사용하고 싶을 때

where절에 결과를 쓰고 싶을 때 Subquery문 이용 가능합니다!

▷ 30대 이상이 주문한 결과만 조회하고 싶을 때

 

Subquery문의 기본 구조

(a+b)*2를 한다면 a+b를 먼저 계산하고 *2를 하듯이

한 번 Query를 해 준 다음 결과문을 다시 활용하고 싶을 때 사용하는 것을 Subquery문이라고 생각하면 됩니다!

 

예시) Subquery문을 이용하여 연산문 적어보기

주문 테이블에서 주문 번호, 음식점 명, 음식 준비시간을 가져오기

select order_id, restaurant_name, food_preparing_time

from

(

select order_id, restaurant_name, food_preparing_time

from food_orders

) a

Subquery문 안을 수정해서, 음식 주문시간이 25분보다 초과한 시간을 가져오기

select order_id, restaurant_name, if(over_time>0, over_time, 0) over_time

from

(

select order_id, restaurant_name, food_preparing_time-25 over_time

from food_orders

) a

 

2. User Segmentation 와 조건별 수수료를 Subquery 로 결합해보기

실습1) 음식점의 평균 단가별 segmentation을 진행하고, 그룹에 따라 수수료 연산하기 

(수수료 구간 - ~5000원 미만 0.5%

                      ~20000원 미만 1%

                      ~30000원 미만 2%

                      30000원 초과 3%)

이번에는 직접 작성한 것을 캡쳐해봤어요

실습2) 음식점의 지역과 평균 배달시간으로 segmentation하기

 3. 복잡한 연산을 Subquery로 수행하기

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

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

실습2) 음식점의 총 주문수량과 주문 금액을 연산하고, 주문 수량을 기반으로 수수료 할인율 구하기

할인조건 수량이 5개이하→ 10%

              수량이 15개 초과, 총 주문금액이 3000000이상 → 0.5%

              이외에는 일괄 1%

큰일났어요.. 자꾸만 어려워지네요.. 그래도 계속 반복해서 풀면 이해는 되는데

다른 문제가 나오면 풀 수 있을지가 쿄쿄 아직 시작 단계인데 너무 많은 것을 바라는가 싶기도 합니다..!

오늘은 일단 여기까지 하고 주말이나 연휴 기간에 마저 이어가도록 할게요! 오늘도 수고 많으셨습니다!

 

다시 이어가기 위해서 연휴 기간에 다시 강의를 들으러 왔습니다! 시작할게요~!

 

4. 필요한 데이터가 서로 다른 테이블에 있을 때 조회하기 (JOIN)

JOIN

- 여러 테이블에서 필요한 데이터를 불러오는 방법입니다!

- JOIN은 엑셀의 Vlookup과 유사한데요,

LEFT JOIN : 공통 컬럼을 기준으로, 하나의 테이블에 값이 없더라도 모두 조회되는 경우

INNER JOIN : 공통 컬럼 (키값) 을 기준으로, 두 테이블 모두에 있는 값만 조회되는 경우

위 예시에서 주문번호 14번의 경우, 고객에 대한 정보가 고객 정보에 없으므로 조회 시 제외됩니다.

 

JOIN의 기본구조

💡여기서! 팁!

공통컬럼은 묶어주기 위한 ‘공통 값’ 이기 때문에 두 테이블의 컬럼명은 달라도 괜찮아요.
예를 들어 주문정보에는 ‘고객ID’, 고객정보에는 ‘고객아이디’ 라고 컬럼명이 되어있다면,
테이블1.고객ID=테이블2.고객아이디 와 같이 묶어줄 수 있습니다.

 

실습) JOIN을 이용하여 두 개의 테이블을 customer_id를 기준으로 left join으로 묶어보기

(조회 컬럼 : order_id, customer_id, restaurant_name, price, name, age, gender)
select f.order_id,

           f.customer_id,

           f.restaurant_name,

           f.price,

           c.name,

           c.age,

           c.gender

from food_orders f left join customers c on f.customer_id = c.customer_id

 

5.  [실습] JOIN 으로 두 테이블의 데이터 조회하기

실습 1) 한국 음식의 주문별 결제 수단과 수수료율을 조회하기
(조회 컬럼 : 주문 번호, 식당 이름, 주문 가격, 결제 수단, 수수료율)
*결제 정보가 없는 경우도 포함하여 조회

실습2) 고객의 주문 식당 조회하기 (조회 컬럼 : 고객 이름, 연령, 성별, 주문 식당)
*고객명으로 정렬, 중복 없도록 조회 → 고객명으로 정렬 : order by c.name, 중복 없도록 조회 : distinct

6. [실습] JOIN 으로 두 테이블의 값을 연산하기

실습 1) 주문 가격과 수수료율을 곱하여 주문별 수수료 구하기

(조회 컬럼 : 주문 번호, 식당 이름, 주문 가격, 수수료율, 수수료)

* 수수료율이 있는 경우만 조회 → 공통된 값이 있는 경우만 조회 ☞inner join

실습 2) 50세 이상 고객의 연령에 따라 경로 할인율을 적용하고, 음식 타입별로 원래 가격과 할인 적용 가격 합을 구하기
(조회 컬럼 : 음식 타입, 원래 가격, 할인 적용 가격, 할인 가격)               ↘subquery문
*할인 : 나이-50*0.005
* 고객 정보가 없는 경우도 포함하여 조회, 할인 금액이 큰 순서대로 정렬

  → 고객 정보가 없는 경우도 포함하여 조회 : left join, 할인 금액이 큰 순서대로 정렬 : order by ~ desc

이번 4주차도 다행히 별 무리없이 끝났습니다!!!

어렵긴 하지만 반복해서 풀어보면 풀리긴 풀리네요...ㅋㅋㅋ

다른 문제도 주어지면 풀 줄 알게끔 하고 싶은데 그거까진 아직 어려운 거 같아요!

그렇지만 계속해서 다른 문제들도 풀어보면 이해가 가지 않을까 싶어요!

더 파이팅 해보기로 해요!!