[MySQL] 프로그래머스 상품 별 오프라인 매출 구하기
2023. 1. 12.
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/131533

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 서론

 

생각보다 난이도 있는 문제다... 주의!

 

2. 문제 풀이

 

PRODUCT: 의류 쇼핑몰에서 판매 중인 상품들의 상품 정보를 담은 테이블

 

테이블 구조:

PRODUCT_ID, PRODUCT_CODE, PRICE

(각각 상품 ID, 상품코드, 판매가)

 

OFFLINE_SALE: 오프라인 상품 판매 정보를 담은 테이블

 

테이블 구조:

OFFLINE_SALE_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE

(각각 오프라인 상품 판매 ID, 상품 ID, 판매량, 판매일)

 

 

 

 

Q. PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성해 주세요. 결과는 매출액을 기준으로 내림차순 정렬해 주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬해 주세요.

 

테이블이 두 개이기 때문에 Join 해야 하는 문제다. 두 테이블을 묶어주기 위해 Join을 사용하고 product의 기본키이자 offline_sale의 외래키인 product_id를 같다고 해준다.

'상품코드 별 매출액'이므로 상품코드라는 그룹으로 묶어야 한다.

그리고 상품코드 별 '매출액'을 구해야 한다. 공식은 이미 '매출액 = 판매가 * 판매량'이라고 주어졌다.

그러므로 상품코드가 같은 그룹에서 판매량이 얼만지 구하기 위해 판매량인 sales_amount를 다 더해서 총량을 구하고 거기에 판매가를 곱하면 총 매출액이 되는 것이다. (난 처음에 sum을 count로 하다가 헤맸다. 솔직히 아예 다른 개념인데 때때로 헷갈릴 때가 있다)

 

 

 

 

 

3. 코드 설명

 

select p.product_code, p.price * sum(o.sales_amount) as SALES
from product p, offline_sale o
where p.product_id = o.product_id
group by p.product_code
order by sales desc, product_code;

 

위에서 말한 대로 문제에서 요구하는 product_code와 총 매출액을 계산해서 문제조건인 sales로 이름을 바꿔줬다.

나머지는 위에서 말한대로 where, group by, order by절에 조건을 줬다.

 

(group by, sum에 대해서 많은 교훈을 주는 문제)

 

 

 

반응형
myoskin