https://school.programmers.co.kr/learn/courses/30/lessons/131533
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에 대해서 많은 교훈을 주는 문제)
'SQL' 카테고리의 다른 글
[MySQL] 프로그래머스 카테고리 별 상품 개수 구하기 (0) | 2023.01.13 |
---|---|
[MySQL] 프로그래머스 가격대 별 상품 개수 구하기 (0) | 2023.01.12 |
[MySQL] 프로그래머스 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2023.01.12 |
[SQLD] SQLD 요약본 아카이브 (0) | 2021.07.02 |
[ORACLE] 프로그래머스 헤비 유저가 소유한 장소 (+ MySQL) (0) | 2021.05.30 |