프로그래머스 ORACLE 상품 별 오프라인 매출 구하기DB/쿼리 문제풀이2023. 10. 6. 15:04
Table of Contents
1
이렇게 하면 sum이 안되어서 상품코드들이 겹쳐서 다 나옴
SELECT A.PRODUCT_CODE, A.PRICE * B.SALES_AMOUNT AS SALES
FROM PRODUCT A
INNER JOIN OFFLINE_SALE B
ON A.PRODUCT_ID = B.PRODUCT_ID
2
집계함수 쓰려고 GROUP BY 추가
—>상품코드들 안겹치는거 볼수있음
SELECT A.PRODUCT_CODE, SUM(A.PRICE * B.SALES_AMOUNT) AS SALES
FROM PRODUCT A
INNER JOIN OFFLINE_SALE B
ON A.PRODUCT_ID = B.PRODUCT_ID
GROUP BY A.PRODUCT_CODE --참고
ORDER BY SALES DESC, A.PRODUCT_CODE;
-- SALES 기준으로 내림차순 정렬, SALES 같다면 PRODUCT_CODE 기준으로 오름차순 정렬
<참고>
이 쿼리에서 GROUP BY A.PRODUCT_ID 부분이 문제입니다. 원래의 목적은 각 제품별로 매출을 계산하고 싶으나, PRODUCT_ID는 제품의 고유 식별자이지만 제품을 식별하는 키가 아닙니다. PRODUCT_CODE가 제품을 구분하는 주요 키이므로, GROUP BY A.PRODUCT_ID를 사용하면 제품 코드가 아닌 제품 ID에 따라 그룹화되어 정확한 매출을 계산할 수 없게 됩니다.
따라서 올바른 결과를 얻기 위해서는 GROUP BY A.PRODUCT_CODE를 사용하여 제품 코드로 그룹화하고 매출을 계산해야 합니다. 그리고 ORDER BY 절에서도 A.PRODUCT_CODE를 사용하여 제품 코드를 기준으로 정렬합니다.
<order by>
📌GROUB BY, 집계함수, ORDER BY 순서
'DB > 쿼리 문제풀이' 카테고리의 다른 글
프로그래머스 ORACLE 있었는데요 없었습니다 (0) | 2023.10.06 |
---|---|
프로그래머스 ORACLE 없어진 기록 찾기 (0) | 2023.10.06 |
프로그래머스 ORACLE 조건에 맞는 도서와 저자 리스트 출력하기 (0) | 2023.10.06 |
프로그래머스 ORACLE 카테고리 별 도서 판매량 집계하기 (0) | 2023.10.06 |
프로그래머스 ORACLE 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2023.10.06 |