새소식

Programmers Coding Test/MySQL

[프로그래머스 133025] MySQL - Level1 과일로 만든 아이스크림 고르기

  • -

 

과일로 만든 아이스크림 고르기

 

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

 

프로그래머스

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

programmers.co.kr

 

 

1)  문제

다음은 아이스크림 가게의 상반기 주문 정보를 담은 FIRST_HALF 테이블과 
아이스크림 성분에 대한 정보를 담은 ICECREAM_INFO 테이블입니다. 

FIRST_HALF 테이블 구조는 다음과 같으며, SHIPMENT_ID, FLAVOR, TOTAL_ORDER 는 
각각 아이스크림 공장에서 아이스크림 가게까지의 출하 번호, 아이스크림 맛, 
상반기 아이스크림 총주문량을 나타냅니다. FIRST_HALF 테이블의 기본 키는 FLAVOR입니다.

 

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

 

 

 

ICECREAM_INFO 테이블 구조는 다음과 같으며, 
FLAVOR, INGREDITENT_TYPE 은 각각 아이스크림 맛, 아이스크림 성분 타입을 나타냅니다.

INGREDIENT_TYPE에는 아이스크림의 주 성분이 설탕이면 sugar_based라고 입력되고,
아이스크림의 주 성분이 과일이면 fruit_based라고 입력됩니다.
ICECREAM_INFO의 기본 키는 FLAVOR입니다.
ICECREAM_INFO테이블의 FLAVOR는 FIRST_HALF 테이블의 FLAVOR의 외래 키입니다.

 

NAME TYPE NULLABLE
FLAVOR VARCHAR(N) FALSE
INGREDIENT_TYPE VARCHAR(N) FALSE

 

 

문제
상반기 아이스크림 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총주문량이 큰 순서대로 조회하는 SQL 문을 작성해주세요.

 

 

 

 

2)  예시

 

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

 

 

ICECREAM_INFO 테이블이 다음과 같다면

 

 

 

FLAVOR INGREDIENT_TYPE
chocolate sugar_based
vanilla sugar_based
mint_chocolate sugar_based
caramel sugar_based
white_chocolate sugar_based
peach fruit_based
watermelon fruit_based
mango fruit_based
strawberry fruit_based
melon fruit_based
orange fruit_based
pineapple fruit_based

 

 

상반기 아이스크림 총주문량이 3,000보다 높은 아이스크림 맛은 
chocolate, strawberry, melon, white_chocolate입니다. 

이 중에 아이스크림의 주 성분이 과일인 아이스크림 맛은 strawberry와 melon이고 
총주문량이 큰 순서대로 아이스크림 맛을 조회하면 melon, strawberry 순으로 조회되어야 합니다. 

따라서 SQL 문을 실행하면 다음과 같이 나와야 합니다.

 

 

 

FLAVOR
melon
strawberry

 

 

 

 

3)  풀이

 

1. ICECREAM_INFO테이블에서 아이스크림의 맛을 조회합니다.

● SELECT I.FLAVOR ICECREAM_INFO AS I

ICECREAM_INFO 테이블을 AS I를 통해 I로 표현

 

 

2. FIRST_HALF 테이블과 ICECREAM_INFO 테이블을 연결시켜줍니다.

● JOIN FIRST_HALF AS F ON I.FLAVOR = F.FLAVOR

FIRST_HALF 테이블을 AS F를 통해 F로 표현

FLAVOR열 값이 일치하는 행들을 연결시킵니다.

 

 

※ JOIN

테이블 간의 연결 작업을 수행하는데 사용되는 키워드

 

JOIN 유형 설명 JOIN 조건
INNER JOIN 두 테이블 사이에서 일치하는 행만 반환합니다. 조건을 ON 절에 지정
LEFT JOIN
(LEFT OUTER JOIN)
왼쪽 테이블의 모든 행과 일치하는 오른쪽 테이블의 행을 반환합니다. 조건을 ON 절에 지정
RIGHT JOIN
(RIGHT OUTER JOIN)
오른쪽 테이블의 모든 행과 일치하는 왼쪽 테이블의 행을 반환합니다. 조건을 ON 절에 지정
FULL OUTER JOIN 양쪽 테이블의 모든 행을 반환하며, 일치하지 않는 행은 NULL 값으로 채워집니다. 조건을 ON 절에 지정
CROSS JOIN 두 테이블의 모든 행을 조합하여 반환합니다. 조건이 필요 없음
NATURAL JOIN 두 테이블 사이에서 칼럼 이름이 동일한 칼럼들을 기반으로 일치하는 행을 반환합니다. 조건이 필요 없음
SELF JOIN 하나의 테이블을 여러 번 사용하여 자체와 조인하는 것을 의미합니다. 별명으로 조인
USING 절 두 테이블 사이에서 일치하는 칼럼들을 지정하여 사용합니다. 조건을 USING 절에 지정

 

 

 

 

 

 

3. 총 주문량 3000을 초과하고, 주성분이 과일인 아이스크림만 추출합니다.

● WHERE F.TOTAL_ORDER > 3000 AND I.INGREDIENT_TYPE = 'fruit_based'

 

 

4. 총 주문량이 큰 순서대로 조회합니다.

● ORDER BY F.TOTAL_ORDER DESC

 

 

 

 

 

4)  코드

SELECT I.FLAVOR
FROM ICECREAM_INFO AS I
INNER JOIN FIRST_HALF AS F ON I.FLAVOR = F.FLAVOR
WHERE F.TOTAL_ORDER > 3000 AND I.INGREDIENT_TYPE = 'fruit_based'
ORDER BY F.TOTAL_ORDER DESC;

 

SELECT F.FLAVOR
FROM FIRST_HALF AS F
INNER JOIN ICECREAM_INFO AS I ON F.FLAVOR = I.FLAVOR
WHERE F.TOTAL_ORDER > 3000 AND I.INGREDIENT_TYPE = 'fruit_based'
ORDER BY F.TOTAL_ORDER DESC;

* 이렇게 해도 됩니다.

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.