DB/쿼리 문제풀이

프로그래머스 ORACLE 상품 별 오프라인 매출 구하기

sshhhh 2023. 10. 6. 15:04

 

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 순서