코딩테스트/SQL 코딩테스트
<프로그래머스> 상품 별 오프라인 매출 구하기
배또가또
2023. 12. 19. 17:13
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/131533
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 문제 요구사항
- 상품 코드 별 매출액(판매가*판매량) 합계를 출력하는 SQL문을 작성
- 결과는 매출액을 기준으로 내림차순 정렬
- 매출액이 같다면 상품코드를 기준으로 오름차순 정렬
PRODUCT과 OFLINE_SALE 테이블을 INNER_JOIN해야함
상품코드별 누적 판매량(AMOUNT)을 계산한 뒤에 거기에 판매가를 곱하기 위해서 FROM절에 서브쿼리를 사용함
상품코드를 기준으로 GROUP BY를 해서 누적 판매량을 계산한 서브쿼리를 하나의 테이블로 사용하여
불러온 누적 판매량에 해당하는 제품 가격을 곱해서 SALES를 계산함
1) Oracle
SELECT PRODUCT_CODE,
TOTAL_AMOUNT * PRICE AS SALES
FROM
(
SELECT P.PRODUCT_CODE,
P.PRICE,
SUM(O.SALES_AMOUNT) AS TOTAL_AMOUNT
FROM PRODUCT P INNER JOIN OFFLINE_SALE O ON P.PRODUCT_ID = O.PRODUCT_ID
GROUP BY P.PRODUCT_CODE, P.PRICE
) A
ORDER BY SALES DESC, PRODUCT_CODE;
Oracle의 경우 GROUP BY를 할 때 그룹을 지을 대상이 되는 칼럼 뿐만 아니라 집계함수가 사용되지 않은 다른 칼럼의 이름까지 적어주어야 오류가 나지않고 동작한다.
2) MySQL
SELECT PRODUCT_CODE,
TOTAL_AMOUNT * PRICE AS SALES
FROM
(
SELECT P.PRODUCT_CODE,
SUM(O.SALES_AMOUNT) AS TOTAL_AMOUNT,
P.PRICE
FROM PRODUCT P INNER JOIN OFFLINE_SALE O ON P.PRODUCT_ID = O.PRODUCT_ID
GROUP BY P.PRODUCT_CODE
) A
ORDER BY 2 DESC, 1