Coding Test
(SQL > JOIN) : 4일차 상품 별 오프라인 매출 구하기
Santino
2025. 2. 8. 13:08
00:45
# 몰랐던 & 헷갈렸던 부분
1. 집계 함수 SUM(), COUNT(), AVG() 등을 사용할 때에는 GROUP BY절 필수
2. SUM 계산 부분
(x) (p.Price * SUM(o.SALES_AMOUNT))
(o) SUM(p.PRICE * o.SALES_AMOUNT) ---> 이렇게 SUM 내부에서 계산을 해야함
3. SUM(SALES_AMOUNT) * P.PRICE AS SALES
--> 여기서 o.없이 위처럼 명시해도 되지만(여기서는 해당 테이블이 하나라서 문제는 없음)
명확하게 나타내기 위하여, o.SALES_AMOUNT 이런식으로 o.을 추가해주는게 좋음
4. GROUP BY가 어떤식으로 진행되는지
1) P001 상품에 대한 SALES_AMOUNT를 찾으려면,
- PRODUCT 테이블에서, PRODUCT_CODE가 P001인 상품의 PRODUCT_ID (1번) 찾기
- 해당 PRODUCT_ID (1번)를 OFFLINE_SALE에서 찾기 --> SALES_ID 1,3번
- (SALE_ID 1번은 SALES_AMOUNT 10 // SALE_ID 3번은 SALES_AMOUNT 20)
--> 해당 내용을 토대로 SELECT 문에서 SUM(p.PRICE * o.SALES_AMOUNT)를 통하여 값 도출
즉, p.PRICE는 1000, o.SALES_AMOUNT는 30 이므로 결과는 30,000
1. 내가 작성한 답(오답)
# 1. 출력 --> 매출액(판매가 * 판매량)
# 2. 매출액 기준 내림차순, 상품코드 기준 오름차순
SELECT p.PRODUCT_CODE, (p.Price * SUM(o.SALES_AMOUNT)) AS SALES
FROM PRODUCT p
INNER JOIN OFFLINE_SALE o
ON p.PRODUCT_ID = o.PRODUCT_ID
ORDER BY SALES DESC, p.PRODUCT_CODE ASC;
2. 정답
SELECT PRODUCT_CODE, SUM(p.PRICE * o.SALES_AMOUNT) AS SALES
FROM PRODUCT p
INNER JOIN OFFLINE_SALE o
ON p.PRODUCT_ID = o.PRODUCT_ID
GROUP BY PRODUCT_CODE
ORDER BY SALES DESC, PRODUCT_CODE ASC;