-
728x90
문제 설명
다음은 어느 의류 쇼핑몰에서 판매중인 상품들의 상품 정보를 담은
PRODUCT
테이블과 오프라인 상품 판매 정보를 담은OFFLINE_SALE
테이블 입니다.PRODUCT
테이블은 아래와 같은 구조로 PRODUCT_ID, PRODUCT_CODE, PRICE는 각각 상품 ID, 상품코드, 판매가를 나타냅니다.상품 별로 중복되지 않는 8자리 상품코드 값을 가지며, 앞 2자리는 카테고리 코드를 의미합니다.
OFFLINE_SALE
테이블은 아래와 같은 구조로 되어있으며 OFFLINE_SALE_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 오프라인 상품 판매 ID, 상품 ID, 판매량, 판매일을 나타냅니다.
동일한 날짜, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재합니다.문제
PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬해주세요.
답안
SELECT p.PRODUCT_CODE, SUM(o.sales_amount)*p.price as SALES FROM PRODUCT p, OFFLINE_SALE o WHERE p.product_id = o.product_id GROUP BY p.PRODUCT_CODE ORDER BY 2 DESC, 1 ASC
문제에 주된 포인트인 상품코드 별 매출액을 구하기 위해서
OFFLINE_SALE
의PRODUCT_CODE
를group by
로 묶어주고 고SUM()
으로 더한 판매량과 가격을 곱해준다.이 때 group by로 묶으면 로우가 묶어서 출력되는데 왜 SUM을 하는지 헷갈릴 수 있는데 row의 개수가아닌 sales_amount의 합으로 계산해야 하기 때문에 SUM을 통해 값을 추출해준다.
(내가 헷갈림)728x90'database > coding test' 카테고리의 다른 글
JOIN - 그룹별 조건에 맞는 식당 목록 출력하기 (0) 2023.09.04 JOIN - 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) 2023.09.04 JOIN - 조건에 맞는 도서와 저자 리스트 출력하기 (0) 2023.09.04 String, Date - 자동차 평균 대여 기간 구하기 (0) 2023.09.01 SUM, MAX, MIN - 가격이 제일 비싼 식품의 정보 출력하기 (0) 2023.09.01