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 |