본문 바로가기

하루 30분 SQL 공부하기

[MySQL] 프로그래머스 성분으로 구분한 아이스크림 총 주문량

 

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

 

프로그래머스

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

programmers.co.kr

 

문제 분석

난이도 : level 2

테이블 : FIRST_HALF(SHIPMENT_IDFLAVORTOTAL_ORDER), ICECREAM_INFO(FLAVORINGREDITENT_TYPE)

 

 

문제 요구사항 

상반기 동안 각 아이스크림 성분 타입과 성분 타입에 대한 아이스크림의 총주문량을 총주문량이 작은 순서대로 조회하는 SQL 문을 작성해주세요. 이때 총주문량을 나타내는 컬럼명은 TOTAL_ORDER로 지정해주세요.

 

 

문제 풀이 

1. JOIN을 사용하는 방법

  • join을 사용해서 두개의 테이블을 FLAVOR를 기준으로 합친다. 
  • 문제에서  각 아이스크림 성분 타입의 총 주문량을 요구하고 있으므로  아이스크림 성분 타입으로 GROUP BY 해준다. 
  • SUM을 이용해서  각 아이스크림 성분 타입별 총 주문량의 합을 계산한다. 
  • TOTAL_ORDER을 기준으로 내림차순 정렬한다. 
SELECT I.INGREDIENT_TYPE, SUM(F.TOTAL_ORDER) AS TOTAL_ORDER
FROM FIRST_HALF AS F, ICECREAM_INFO AS I
WHERE F.FLAVOR = I.FLAVOR
GROUP BY I.INGREDIENT_TYPE
ORDER BY F.TOTAL_ORDER ASC

 

 

2. WHRER을 사용하는 방법

WHERE F.FLAVOR = I.FLAVOR 퀴리를 사용해서 두 테이블 간에 FLAVOR 컬럼을 기준으로 내부 조인을 수행할 수 있다. 

즉, FIRST_HALF 테이블의 FLAVOR와 ICECREAM_INFO 테이블의 FLAVOR가 일치하는 행들만 결합

SELECT I.INGREDIENT_TYPE, SUM(TOTAL_ORDER) AS TOTAL_ORDER
FROM FIRST_HALF AS F, ICECREAM_INFO AS I
WHERE F.FLAVOR = I.FLAVOR
GROUP BY INGREDIENT_TYPE
ORDER BY TOTAL_ORDER ASC

 

 

내부적으로 JOIN이 수행되는 것은 똑같지만 WHERE을 사용해서 좀더 직관적으로 JOIN을 표현할 수 있는 방법이다.