Programming Language/SQL 문제풀이

[SQL 문제풀이] 2. Subquery로 조건별 수수료 계산

wakelight23 2024. 10. 15. 19:55

SubQuery?

● Query 안에 Sub로 들어간 구문

 

● 왜 필요할까?

- 여러번의 연산을 효율적으로 수행하기 위해

- 조건문에 연산 결과를 사용하기 위해

- 조건에 Query 결과를 사용하기 위해

 

기본 구조

SELECT 칼럼1, 칼럼2
FROM
          ( SELECT 칼럼1, 칼럼2
            FROM 테이블
          ) a

 - 수학 연산에서 '(a+b)*c' 와 연산방식이 같다

 - 괄호 안에 먼저 명령문을 수행하고 밖에 있는 값을 명령문 수행

- 'a' 의 의미는 ()의 순서 or 명칭 ( a라는 SubQuery )

 

● 문제 : 음식점의 평균 단가별 Segmentation(세분화)을 진행하고,

          그룹에 따라 수수료를 연산하기

   (수수료 구간 ~5000원 미만 0.05%

                        ~20000원 미만 1%

                        ~30000원 미만 2%

                        30000원 이상 3%)

예시 TABEL : 주문정보

  고객코드 음식점명 가격 주문수량
1 1001 식스맨 18000 3
2 1002 피자리아 60000 2
3 1003 스케스시 42000 2
4 1004 셋찜닭 45000 9
5 1005 단리향 54000 6
6 1006 브리또스 32000 8

 

 - 구문 정리

 1. 어떤 테이블에서 데이터를 뽑을 것인가 - FROM 주문정보

 2. 어떤 칼럼을 사용할 것인가 - 음식점명, 가격, 주문수량

 3. 어떤 조건을 지정해야 하는 것인가 - X

 4. 어떤 함수를 이용해야 하는가

       - AVG(가격/주문수량), CASE WHEN ELSE END, GROUP BY

 

- 전체 구문

SELECT 음식점명,
             CASE WHEN  < 5000 THEN 평균금액 * 0.0005
             WHEN 평균금액 BETWEEN 5000 AND 19999 THEN 평균금액  * 0.01
             WHEN 평균금액 BETWEEN 20000 AND 29999 THEN 평균금액 * 0.02
             ELSE 평균금액 * 0.03
             END as "수수료"
FROM
          ( SELECT 음식점명,
            AVG(가격/주문수량) 평균금액
            FROM 주문정보
            GROUP BY 음식점명
           ) a

 

- SubQuery 'a' 의 결과물

  음식점명 평균금액
1 식스맨 6000
2 피자리아 30000
3 스케스시 21000
4 셋찜닭 5000
5 단리향 9000
6 브리또스 4000

 

- 전체 결과

  음식점명 수수료
1 식스맨 60
2 피자리아 900
3 스케스시 420
4 셋찜닭 50
5 단리향 90
6 브리또스 2