알고리즘 공부/SQL

[L4] 프로그래머스 ORACLE 주문량이 많은 아이스크림들 조회하기

마달랭 2024. 10. 18. 17:46
반응형

테이블 정보

1. FIRST_HALF 

NAME TYPE NULLABLE
SHIPMENT_ID INT(N) FALSE
FLAVOR VARCHAR(N) FALSE
TOTAL_ORDER INT(N) FALSE

 

2. JULY 

NAME TYPE NULLABLE
SHIPMENT_ID INT(N) FALSE
FLAVOR VARCHAR(N) FALSE
TOTAL_ORDER INT(N) FALSE

 

예시 테이블

1. FIRST_HALF 

SHIPMENT_ID FLAVOR TOTAL_ORDER
101 chocolate 3200
102 vanilla 2800
103 mint_chocolate 1700
104 caramel 2600
105 white_chocolate 3100
106 peach 2450
107 watermelon 2150
108 mango 2900
109 strawberry 3100
110 melon 3150
111 orange 2900
112 pineapple 2900

 

2. JULY 

SHIPMENT_ID FLAVOR TOTAL_ORDER
101 chocolate 520
102 vanilla 560
103 mint_chocolate 400
104 caramel 460
105 white_chocolate 350
106 peach 500
107 watermelon 780
108 mango 790
109 strawberry 520
110 melon 400
111 orange 250
112 pineapple 200
208 mango 110
209 strawberry 220

 

 

출력 기대값

FLAVOR
strawberry
mango
chocolate

 

 

문제

7월 아이스크림 총 주문량과 상반기의 아이스크림 총 주문량을 더한 값이 큰 순서대로 상위 3개의 맛을 조회하는 SQL 문을 작성해주세요.

 

 

아이디어

  1. 7월 아이스크림 총 주문량과 상반기의 아이스크림 총 주문량을 알아야 하기에 두 테이블을 조인한다.
  2. 다만, JULY테이블을 보면 FLAVOR가 중복된 요소가 있는 것이 보인다.
  3. SHIPMENT_ID 또한 JULY에 존재하나 FIRST_HALF 테이블에는 없는 번호가 있다.
  4. 따라서 JULY테이블을 참조해 FLAVOR기준 TOTAL_ORDER의 합계를 담는 서브쿼리를 생성해 주어야 한다.
  5. 해당 서브쿼리와 FIRST_HALF테이블을 INNER JOIN하고 FLAVOR과 두 값을 합친 쿼리를 출력해 준다.
  6. 이때 총 매출액을 기준으로 내림차순 정렬을 해주어야 한다.
  7. 최종적으로는 FLAVOR만 출력해 주어야 하므로 위 쿼리 또한 서브쿼리로 사용하여 FLAVOR을 출력한다.
  8. 문제조건에 상위 3개의 맛을 조회하라고 되어 있으니 WHERE절에 ROWNUM <= 3을 추가해 주면 된다.

 

정답

-- 코드를 입력하세요
SELECT FLAVOR
FROM (
    SELECT A.FLAVOR, A.TOTAL_ORDER + B.TOTAL_ORDER AS TOTAL_ORDER
    FROM FIRST_HALF A
    INNER JOIN (
        SELECT FLAVOR, SUM(TOTAL_ORDER) AS TOTAL_ORDER
        FROM JULY
        GROUP BY FLAVOR
    ) B
    ON A.FLAVOR = B.FLAVOR
    ORDER BY 2 DESC
)
WHERE ROWNUM <= 3

 

 

참고사항

서브쿼리 > 서브쿼리 > 조회 순으로 진행했다.

 

728x90
반응형