본문 바로가기
문제풀이/SQL(My sql)

[문제풀이] 상품별 오프라인 매출 구하기 - 다른사람 풀의 해석 필요

by kime2 2024. 1. 5.
출처

 

문제

PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬해주세요.

 

문제에 대한 해석

PRODUCT_CODE별로 매출액을 구한다

 

풀이(MYSQL)

with temp as(
select p.product_code, off.sales_amount,p.price
from product p join offline_sale off on p.product_id = off.product_id
)
select product_code, sum(sales_amount*price) total_sales
from temp
group by product_code
order by total_sales desc, product_cod

 

작동순서

💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환

 

  1. WITH 절: product테이블과 offline_sale을 product_id를 기준으로 조인하여 product_code, sales_amount,price의 데이터를 temp테이블로 지정한다
  2. FROM 절: temp테이블에서
  3. GROUP BY 절: product_code그룹화하여
  4. SELECT 절: price와 amount를 곱하여(매출액 산출) 그룹화된  product_code끼리 합하고 total_sales의컬럼으로 만든다
  5. ORDER BY 절: product_code은 내림순으로(desc) total_sales은 오름차순으로 구한다
  6. 결과반환: 각 product_code에 total_sales을 알 수 있다

 

다른사람 풀이

SELECT
       상품정보.PRODUCT_CODE "상품코드"
     , SUM(상품정보.PRICE * 판매정보.SALES_AMOUNT) "매출액"
  FROM
       PRODUCT "상품정보", OFFLINE_SALE "판매정보"
 WHERE 1=1
   AND 상품정보.PRODUCT_ID(+) = 판매정보.PRODUCT_ID
 GROUP BY 상품정보.PRODUCT_CODE, 상품정보.PRICE
 ORDER BY 매출액 DESC, 상품코드 ASC

배운점

  • with 절을 통해 쿼리의 가독성 향상
  • 그룹화를 통한 집계함수 사용
  • from...where 1=1 ..???