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;