Post

09. SQL(Practice)

09. SQL(Practice)

[toc]

Practice 문제 풀이

🧠 문제

2014년에 이루어진 주문들 가운데 State별 평균 주문금액이 큰 순서대로 State명과 주문 금액을 출력하라


🔍 문제 분석 (한글로 정리)

  • 2014년 주문 데이터 → WHERE에서 날짜 필터링 필요
  • State 정보 → c_customer 테이블
  • 주문 금액 → 제품 가격 × 주문 수량
  • 제품 가격 → c_product, 수량 → c_order
  • 최종 출력 → State명과 평균 주문 금액
  • 정렬 → 평균 주문금액 기준 내림차순 정렬

🧩 테이블 구조 및 연결 키

  • c_order: ORDERID(PK), CUSTOMERID, PRODUCTID, ORDERDATE, QUANTITY
  • c_customer: CUSTOMERID(PK), STATE
  • c_product: PRODUCTID(PK), PRICE

✅ SQL 풀이 과정

1단계: 테이블 구조 확인

1
2
3
SELECT * FROM class.c_order;
SELECT * FROM class.c_customer;
SELECT * FROM class.c_product;

2단계: Join을 위한 메인 테이블 선정

  • c_order가 주문의 중심 → CUSTOMERID, PRODUCTID 모두 포함
1
2
3
4
SELECT *
FROM class.c_order co
JOIN class.c_customer cc ON co.CUSTOMERID = cc.CUSTOMERID
JOIN class.c_product cp ON co.PRODUCTID = cp.PRODUCTID;

3단계: 2014년 주문만 필터링

1
2
3
4
5
6
SELECT *
FROM class.c_order co
JOIN class.c_customer cc ON co.CUSTOMERID = cc.CUSTOMERID
JOIN class.c_product cp ON co.PRODUCTID = cp.PRODUCTID
WHERE co.ORDERDATE >= '2014-01-01'
  AND co.ORDERDATE <= '2014-12-31';

4단계: State별 평균 주문금액 집계

1
2
3
4
5
6
7
SELECT cc.STATE, AVG(cp.PRICE * co.QUANTITY) AS AVG_Amount
FROM class.c_order co
JOIN class.c_customer cc ON co.CUSTOMERID = cc.CUSTOMERID
JOIN class.c_product cp ON co.PRODUCTID = cp.PRODUCTID
WHERE co.ORDERDATE >= '2014-01-01'
  AND co.ORDERDATE <= '2014-12-31'
GROUP BY cc.STATE;

5단계: 평균 금액 기준 내림차순 정렬

1
2
3
4
5
6
7
8
SELECT cc.STATE, AVG(cp.PRICE * co.QUANTITY) AS AVG_Amount
FROM class.c_order co
JOIN class.c_customer cc ON co.CUSTOMERID = cc.CUSTOMERID
JOIN class.c_product cp ON co.PRODUCTID = cp.PRODUCTID
WHERE co.ORDERDATE >= '2014-01-01'
  AND co.ORDERDATE <= '2014-12-31'
GROUP BY cc.STATE
ORDER BY AVG_Amount DESC;

🧾 결과

순위StateAverage Order Amount
1New Hampshire225.94
2Arkansas205.73
3New Mexico180.80
4Connecticut179.91
5Wisconsin179.41
6District of Columbia178.28
7Missouri166.71
8Tennessee166.12
9Delaware155.53
10Arizona155.33

Summary

  • 문제는 한글로 정리하며 파악하는 습관이 중요하다.
  • SELECT는 컬럼(가로), WHERE은 조건(세로) 로 접근
  • 조인 키와 메인 테이블 선택이 쿼리 성능과 가독성에 영향을 미친다.
  • 집계 함수와 GROUP BY, ORDER BY의 조합으로 원하는 결과를 얻는다.

End