🔗 1. 문제 URL
https://school.programmers.co.kr/learn/courses/30/lessons/131533
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📝 2. 문제 요구사항 정리
PRODUCT 테이블과 OFFLINE_SALE 테이블을 이용해
상품코드(Product Code) 별 매출액(판매가 × 총 판매량)을 구하는 문제입니다.
- 상품별 총 판매량 = OFFLINE_SALE 테이블에서 SALES_AMOUNT 합산
- 매출액 = PRICE × 총 판매량
- 최종 출력 컬럼
- PRODUCT_CODE
- SALES (매출액)
- 정렬 조건
- 매출액 내림차순
- 매출액이 같다면 상품코드 오름차순
💡 3. 핵심 개념
✔ 1) 상품별 총 판매량 집계
OFFLINE_SALE 테이블에서 같은 PRODUCT_ID를 기준으로 SUM(SALES_AMOUNT) 필요
✔ 2) 집계 결과와 PRODUCT 테이블 조인
상품의 판매가(PRICE)와 판매량 합계를 함께 사용해야 하기 때문에
PRODUCT 테이블과 PRODUCT_ID 기준으로 JOIN
✔ 3) 매출액 계산
PRICE * SALES_AMOUNT
✔ 4) 정렬 조건 적용
- 매출액 기준 DESC
- 상품코드 기준 ASC
✅ 4. 정답 SQL 코드
SELECT P.PRODUCT_CODE, P.PRICE * S.SALES_AMOUNT AS SALES
FROM PRODUCT P JOIN (SELECT PRODUCT_ID, SUM(SALES_AMOUNT) AS SALES_AMOUNT
FROM OFFLINE_SALE
GROUP BY PRODUCT_ID
) AS S
ON P.PRODUCT_ID = S.PRODUCT_ID
ORDER BY SALES DESC, P.PRODUCT_CODE ASC;
-- 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성
-- 결과는 매출액을 기준으로 내림차순 정렬. 매출액이 같다면 상품코드를 기준으로 오름차순 정렬
-- 서브쿼리를 CTE(Common Table Expression)로 분리
WITH SALES_SUM AS (
SELECT PRODUCT_ID, SUM(SALES_AMOUNT) AS SALES_AMOUNT
FROM OFFLINE_SALE
GROUP BY PRODUCT_ID
)
SELECT P.PRODUCT_CODE,
P.PRICE * S.SALES_AMOUNT AS SALES
FROM PRODUCT P
JOIN SALES_SUM S ON P.PRODUCT_ID = S.PRODUCT_ID
ORDER BY SALES DESC, P.PRODUCT_CODE ASC;
💬 5. 풀이하면서 느낀 점
상품마다 판매량을 합산한 뒤, 그 값을 다시 이용해 매출액을 계산해야 하기 때문에
서브쿼리 또는 CTE가 필수적인 구조라는 점이 포인트였습니다.
특히 PRODUCT 테이블의 PRICE와 OFFLINE_SALE 테이블의 SALES_AMOUNT를
직접 곱할 수 없기 때문에 먼저 판매량을 서브쿼리를 이용해 그룹화해 놓는 것이 핵심이었습니다.
정렬 조건도
- 매출액 기준으로 먼저 정렬
- 동일 매출액일 때 상품코드 기준 정렬
이라는 두 단계가 있어 SQL 전체 흐름을 깔끔하게 정리하는 연습이 되었습니다.
궁금하신 점이나 포스팅에 대한 피드백이 있다면 댓글로 편하게 남겨주세요.
도움이 되셨다면 공감이나 댓글 한 줄 남겨주시면 포스팅을 이어가는 데 큰 힘이 됩니다. 😊
'코딩테스트 > MYSQL' 카테고리의 다른 글
| [프로그래머스 LV.3] 대장균들의 자식의 수 구하기 — MySQL 정답 & 해설 (0) | 2025.12.08 |
|---|---|
| [프로그래머스 LV.2] 가격대 별 상품 개수 구하기 — MySQL 정답 & 해설 (0) | 2025.12.08 |
| [프로그래머스 LV.2] 분기별 분화된 대장균의 개체 수 구하기 — MySQL 정답 & 해설 (0) | 2025.12.03 |
| [프로그래머스 LV.2] 재구매가 일어난 상품과 회원 리스트 구하기 — MySQL 정답 & 해설 (0) | 2025.12.03 |
| [프로그래머스 LV.2] 성분으로 구분한 아이스크림 총 주문량 — MySQL 정답 & 해설 (0) | 2025.12.01 |