본문 바로가기
프로그래머스/MySQL

[프로그래머스] 상품 별 오프라인 매출 구하기 - MySQL - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2024. 9. 30.
728x90
반응형

 

 

프로그래머스

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

programmers.co.kr

 

1. 문제 설명

반응형

2. 풀이과정

해당 문제는 상품코드 별 매출액(판매가 * 판매량) 합계를 조회하는 문제이다.

문제에서는 상품 정보를 담은 PRODUCT 테이블과 오프라인 상품 판매 정보를 담은 OFFLINE_SALE 테이블이 주어진다.

오프라인 상품 판매 정보 테이블의 상품 ID를 보고 상품 정보 테이블에서 가격 정보를 가져와 매출액을 구해야 한다.

이렇게 서로 다른 테이블에서 데이터를 가져올 때JOIN을 활용해 두 테이블의 정보를 하나로 합쳐야 한다.

 

상품 정보 테이블과 오프라인 상품 판매 정보 테이블에서 겹치는 공통 컬럼은 상품 ID 컬럼이다.

상품 ID 컬럼을 기준으로 JOIN 해주면 된다.

JOIN 이후 상품코드 별 매출액 합계를 구해야 하므로 상품 정보 테이블의 상품코드를 기준으로 그룹을 만들어준다.

매출액은 그룹으로 나눈 상품코드 별 상품 정보 테이블의 판매가 컬럼과 오프라인 상품 판매 정보 테이블의 판매량의 합을 곱하여 구하면 된다.

최종 결과는 매출액을 기준으로 내림차순 정렬하고, 매출액이 같다면 상품코드를 기준으로 오름차순 정렬하여 조회한다.

 

  1. 상품코드와 상품코드 별 매출액을 조회한다. 상품코드 별 매출액은 판매가와 판매량의 합계를 곱하여 구한다. SELECT PRODUCT_CODE, (P.PRICE * SUM(O.SALES_AMOUNT)) AS SALES
  2. 상품 정보 테이블을 P로 지정하고 FROM PRODUCT AS P
  3. 오프라인 상품 판매 정보 테이블을 O로 지정한 뒤, 두 테이블의 공통 컬럼인 상품 ID 컬럼을 기준으로 JOIN 하여 하나의 테이블로 합쳐준다. JOIN OFFLINE_SALE AS O ON P.PRODUCT_ID = O.PRODUCT_ID
  4. 상품코드 별 매출액 합계를 구해야 하므로 상품 정보 테이블의 상품코드를 기준으로 그룹을 만들어준다. GROUP BY P.PRODUCT_CODE
  5. 최종 결과는 매출액을 기준으로 내림차순 정렬하고, 매출액이 같다면 상품코드를 기준으로 오름차순 정렬하여 조회한다. ORDER BY SALES DESC, P.PRODUCT_CODE
728x90

3. 소스코드

SELECT PRODUCT_CODE, (P.PRICE * SUM(O.SALES_AMOUNT)) AS SALES
FROM PRODUCT AS P
JOIN OFFLINE_SALE AS O ON P.PRODUCT_ID = O.PRODUCT_ID
GROUP BY P.PRODUCT_CODE
ORDER BY SALES DESC, P.PRODUCT_CODE
728x90
반응형