SQL

서브쿼리 응용(3)

zzugest1 2023. 1. 6. 13:31

https://school.programmers.co.kr/learn/courses/30/lessons/133027

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

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


예시

 

예를 들어 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

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

7월 아이스크림 총주문량과 상반기의 아이스크림 총 주문량을 더한 값이 큰 순서대로 상위 3개의 맛을 조회하면 strawberry(520 + 220 + 3,100 = 3,840), mango(790 + 110 + 2,900 = 3,800), chocolate(520 + 3,200 = 3,720) 순입니다. 따라서 SQL 문을 실행하면 다음과 같이 나와야 합니다.

FLAVOR
strawberry
mango
chocolate

 

정답

 

SELECT A.FLAVOR FROM (SELECT FLAVOR,SUM(TOTAL_ORDER) AS TOTAL_ORDER FROM FIRST_HALF GROUP BY FLAVOR) AS A
LEFT JOIN (
SELECT FLAVOR,SUM(TOTAL_ORDER) AS TOTAL_ORDER FROM JULY 
GROUP BY FLAVOR) AS B
ON A.FLAVOR=B.FLAVOR
ORDER BY A.TOTAL_ORDER+B.TOTAL_ORDER DESC LIMIT 3

이 문제는 아이스크림 맛 별로 TOTAL_ORDER합이 제일 큰 상위 3가지를 찾는 문제이다. 우선 각 테이블에 FLAVOR열을 보면 맛 별로 행이 두 개 이상인 경우가 있다. 따라서 GROUP BY를 이용해 정리하였는데 위 코드의 B테이블을 예시로 들면 

SELECT FLAVOR,SUM(TOTAL_ORDER) AS TOTAL_ORDER FROM JULY 
GROUP BY FLAVOR

결과 창은 아래와 같다.

FLAVOR TOTAL_ORDER
caramel 460
chocolate 520
mint_chocolate 400
peach 500
strawberry 740
vanilla 560
white_chocolate 350

중복 되는 FLAVOR행이 없도록 GROUP BY를 이용해 JULY테이블을정리 하였다. 마찬가지로 FIRST_HALF에도 적용을 하였고,

FLAVOR TOTAL_ORDER
caramel 2600
chocolate 3200
mint_chocolate 1700
peach 2450
strawberry 3100
vanilla 2800
white_chocolate 3100

 

정리한 두 테이블을 FALVOR를 기준으로 INNER JOIN하였다. 그리고 총 합 상위 3개를 출력하는 것이므로 ORDER BY A.TOTAL_ORDER+B.TOTAL_ORDER DESC LIMIT 3를 이용해 문제를 해결하였다.

'SQL' 카테고리의 다른 글

상품을 구매한 회원 비율 구하기  (0) 2023.01.09
UNION 응용  (0) 2023.01.07
3개 이상의 테이블 JOIN  (0) 2023.01.05
년, 월, 성별 별로 상품을 구매한 회원수 구하기 문제  (0) 2023.01.04
WHERE 논리 연산자 응용  (0) 2023.01.03