출처
문제
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 ->결과반환
- WITH 절: product테이블과 offline_sale을 product_id를 기준으로 조인하여 product_code, sales_amount,price의 데이터를 temp테이블로 지정한다
- FROM 절: temp테이블에서
- GROUP BY 절: product_code그룹화하여
- SELECT 절: price와 amount를 곱하여(매출액 산출) 그룹화된 product_code끼리 합하고 total_sales의컬럼으로 만든다
- ORDER BY 절: product_code은 내림순으로(desc) total_sales은 오름차순으로 구한다
- 결과반환: 각 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 ..???
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] 오랜 기간 보호한 동물(2)-datediff (0) | 2024.01.05 |
---|---|
[문제풀이] 있었는데 없습니다-datediff (0) | 2024.01.05 |
[문제풀이] 카테고리 별 도서 판매량 집계 (1) | 2024.01.04 |
[문제풀이] 오랜 기간 보호한 동물(1) (1) | 2024.01.04 |
[Question] 서브쿼리와 JOIN-완 (0) | 2024.01.03 |