SQL 고득점 Kit: 과일로 만든 아이스크림 고르기
Reference: https://school.programmers.co.kr/learn/courses/30/lessons/133025다음은 아이스크림 가게의 상반기 주문 정보를 담은 FIRST_HALF 테이블과 아이스크림 성분에 대한 정보를 담은 ICECRE
Reference: https://school.programmers.co.kr/learn/courses/30/lessons/133025
문제 설명 ✅
다음은 아이스크림 가게의 상반기 주문 정보를 담은 FIRST_HALF 테이블과 아이스크림 성분에 대한 정보를 담은 ICECREAM_INFO 테이블입니다.
FIRST_HALF 테이블 구조는 다음과 같으며, SHIPMENT_ID, FLAVOR, TOTAL_ORDER는 각각 아이스크림 공장에서 아이스크림 가게까지의 출하 번호, 아이스크림 맛, 상반기 아이스크림 총 주문량을 나타냅니다. FIRST_HALF 테이블의 기본 키는 FLAVOR입니다.
#### FIRST_HALF 테이블 구조
| 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의 외래 키입니다.
#### ICECREAM_INFO 테이블 구조
| NAME | TYPE | NULLABLE | | :-: | :-: | :-: | | FLAVOR | VARCHAR(N) | FALSE | | INGREDIENT_TYPE | VARCHAR(N) | FALSE |
문제 ✅
상반기 아이스크림 총 주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총 주문량이 큰 순서대로 조회하는 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 |
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 |
통과한 코드 ✅
SELECT
FIRST_HALF.FLAVOR
FROM FIRST_HALF
INNER JOIN ICECREAM_INFO
ON FIRST_HALF.FLAVOR = ICECREAM_INFO.FLAVOR
WHERE
FIRST_HALF.TOTAL_ORDER > 3000
AND ICECREAM_INFO.INGREDIENT_TYPE = 'fruit_based'
ORDER BY
FIRST_HALF.TOTAL_ORDER DESC;보충 ✅
조건은 크게 네 가지였습니다.
1. 아이스크림의 맛을 구할 것. 2. 상반기 아이스크림 총 주문량이 3,000보다 높을 것. 3. 아이스크림의 주 성분이 과일일 것. 4. 총 주문량이 큰 순서대로 조회할 것.
2, 3번 요구사항은 조건 처리에 해당하니 WHERE 절에서 처리하면 될 것이고, 4번은 정렬 처리에 해당하니 ORDER BY 절에서 처리하면 될 것입니다.
여기서 2, 3번의 요구사항이 각기 다른 테이블로부터 도출되고 FLAVOR가 외래 키로 사용되었기 때문에 자연스럽게 INNER JOIN을 떠올렸습니다. 문제는 INNER JOIN을 어떻게 사용하는지 까먹었더랬죠.
SELECT
table1.column_name,
table2.column_name
FROM table1
INNER JOIN table2
ON table1.key = table2.key;table1, 2는 조인할 대상 테이블이고, column_name은 조회할 컬럼에 해당합니다. 마지막으로 key는 두 테이블을 연결하는 공통 컬럼이고 보통은 외래 키가 key의 역할을 담당합니다. 결국 두 테이블에서 key 값이 일치하는 행만 반환하게 됩니다.
More to read
프론트엔드와 백엔드 사이
HTTP 상태 코드는 프론트엔드에서 백엔드로 보냈던 요청의 수행 결과를 의미하는 일종의 약속이며, API를 구성하는 핵심 요소 중 하나입니다. 상태 코드와 관련하여, 백엔드는 잘 모르는 프론트엔드의 슬픈 사정이 있습니다.아래는 요청이 실패했음에도, 백엔드에서 상태 코드
JWT토큰 관리 방식 톺아보기
0. 들어가며 🎯 서비스에 접근하려는 사용자가 누구인지 확인하는 과정을 사용자 인증이라고 합니다. 인증된 사용자에게 주어진 권한을 확인하는 작업은 인가라고 부릅니다. 이번 글에서는 인가는 다루지 않습니다. 사용자 인증에는 많은 방식이 있지만, 오늘은 세션 인증 방
A2AA2A / MCP 멀티 에이전트 오케스트레이션
0. 들어가며 ✍️ Google for Developers에, 레스토랑 공급망 시나리오로 엮은 6대 프로토콜(MCP, A2A, UCP, AP2, A2UI, AG-UI)에 대한 가이드가 게시된 이후, MCP와 A2A부터 구현해 보는 것이 좋을 것 같다는 생각이 들었습니