문제
💡 PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬해주세요.
테이블 형태
풀이
SELECT PRODUCT_CODE, SUM(PRICE * SALES_AMOUNT) AS SALES
FROM PRODUCT AS P
JOIN OFFLINE_SALE AS O ON P.PRODUCT_ID = O.PRODUCT_ID
GROUP BY PRODUCT_CODE
ORDER BY SALES DESC, PRODUCT_CODE
해설
FROM PRODUCT AS P
JOIN OFFLINE_SALE AS O ON P.PRODUCT_ID = O.PRODUCT_ID
GROUP BY PRODUCT_CODE
- 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 문제다
- 1️⃣ PRODUCT 테이블(P)과 OFFLINE_SALE 테이블(O)를 PRODUCT_ID를 기준으로 INNER JOIN한다
테이블P에 판매가가 있고, 테이블O에 판매량이 있으므로 두 테이블을 조인해줘야 한다. 공통 컬럼은 PRODUCT_ID이며, 가격과 판매량 정보가 모두 존재해야 매출액을 산출할 수 있으므로 두 테이블의 교집합만 남을 수 있도록 INNER JOIN으로 연결해준다 - 2️⃣상품코드를 기준으로 GROUP BY 한다
SELECT PRODUCT_CODE, SUM(PRICE * SALES_AMOUNT) AS SALES
- 제품 코드와 매출액을 SELECT절에 넣는다. 매출액(SALES)은 위의 식으로 구할 수 있는데, 상품코드별 그룹핑 이후 각 상품코드마다 여러 행의 판매내역이 존재하므로 각 판매내역 별 매출액을 SUM으로 모두 합해줘야 한다. 따라서 (PRICE * SALES_AMOUNT)로 각 판매내역 별 매출액을 계산하고 SUM으로 감싸 상품코드의 전체 매출액을 구한다
ORDER BY SALES DESC, PRODUCT_CODE
- 최종 결과값을 SALES 기준으로 내림차순, 매출액이 같으면 PRODUCT_CODE 를 기준으로 오름차순 정렬시킨다
'SQL > 코딩테스트' 카테고리의 다른 글
[leetcode / MySQL] 570. Managers with at Least 5 Direct Reports (0) | 2024.01.31 |
---|---|
[프로그래머스 / MySQL] 있었는데요 없었습니다 (0) | 2024.01.31 |
[프로그래머스 / MySQL] 동명 동물 수 찾기 (0) | 2024.01.31 |
[프로그래머스 / MySQL] 가장 비싼 상품 구하기 (0) | 2024.01.31 |
[프로그래머스 / MySQL] 최댓값 구하기 (0) | 2024.01.31 |