반응형
테이블 정보
1. PRODUCT
Column name | Type | Nullable |
PRODUCT_ID | INTEGER | FALSE |
PRODUCT_CODE | VARCHAR(8) | FALSE |
PRICE | INTEGER | FALSE |
2. OFFLINE_SALE
Column name | Type | Nullable |
OFFLINE_SALE_ID | INTEGER | FALSE |
PRODUCT_ID | INTEGER | FALSE |
SALES_AMOUNT | INTEGER | FALSE |
SALES_DATE | DATE | FALSE |
예시 테이블
1. PRODUCT
PRODUCT_ID | PRODUCT_CODE | PRICE |
1 | A1000011 | 15000 |
2 | A1000045 | 8000 |
3 | C3000002 | 42000 |
2. OFFLINE_SALE
OFFLINE_SALE_ID | PRODUCT_ID | SALES_AMOUNT | SALES_DATE |
1 | 1 | 2 | 2022-02-21 |
2 | 1 | 2 | 2022-03-02 |
3 | 3 | 3 | 2022-05-01 |
4 | 2 | 1 | 2022-05-24 |
5 | 1 | 2 | 2022-07-14 |
6 | 2 | 1 | 2022-09-22 |
문제
PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬해주세요.
아이디어
- 우선 상품코드 별 판매량을 알아야 한다. 서브쿼리를 통해 PRODUCT_ID별 판매량을 구해준다.
- 이때 OFFLINE_SALE 테이블의 PRODUCT_ID는 여러개 이므로 GROUP BY를 사용해 집계해 준다.
- PRODUCT 테이블과 서브쿼리를 PRODUCT_ID로 INNER JOIN해준다.
- PRODUCT_CODE와 PRICE * 서브쿼리의 판매량을 곱해 출력해 준다.
- ORDER BY는 문제의 조건에 따라 2 내림차순, 1오름차순으로 진행해 준다.
정답
-- 코드를 입력하세요
SELECT A.PRODUCT_CODE, A.PRICE * B.SALES_AMOUNT AS SALES
FROM PRODUCT A
INNER JOIN (
SELECT PRODUCT_ID, SUM(SALES_AMOUNT) AS SALES_AMOUNT
FROM OFFLINE_SALE
GROUP BY PRODUCT_ID
) B
ON A.PRODUCT_ID = B.PRODUCT_ID
ORDER BY 2 DESC, 1
참고사항
서브쿼리는 OFFLINE_SALE 테이블을 참조하여 PRODUCT_ID별 SALES_AMOUNT의 합을 SUM으로 구해준다.
728x90
반응형
'알고리즘 공부 > SQL' 카테고리의 다른 글
[L4] 프로그래머스 ORACLE 5월 식품들의 총매출 조회하기 (0) | 2024.10.18 |
---|---|
[L3] 프로그래머스 ORACLE, MYSQL 오랜 기간 보호한 동물(1) (1) | 2024.10.18 |
[L3] 프로그래머스 ORACLE 보호소에서 중성화한 동물 (0) | 2024.10.18 |
[L3] 프로그래머스 ORACLE 있었는데요 없었습니다 (0) | 2024.10.18 |
[L3] 프로그래머스 ORACLE 없어진 기록 찾기 (0) | 2024.10.18 |