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
AI&ML 기초
Reference: https://bettermesol.github.io/ml/2019/09/16/ai-ml-dl/AI: 기계가 사람처럼 생각하고 판단하게 만드는 가장 넓은 범주의 기술입니다.ML: 데이터를 학습하여 스스로 규칙을 찾아내는 AI의 한 분야로,
'AI Agent Economy'Novitas : AI Agent가 지갑을 가지는 세상
얼마 전, 미래에셋증권 리서치 리포트(올해는 이더리움이다: 에이전트 시대의 Near Automata)를 접하게 되었습니다. AI Agent를 인간과 함께할 경제 주체로 바라보는 시각에 적잖이 충격을 받았더랬죠.한 가지 짚고 넘어갈 부분이 있습니다. 우리가 흔히 'AI'
'ERC-8004'Novitas: AI 에이전트 경제 주체
Web 4.0을 한 문장으로 정의하면 Sovereign Transact입니다.AI가 인간의 허락 없이 지갑을 소유하고, 결제를 수행하며, 인프라를 통제하는 주권적 경제 주체가 되는 세계입니다. Web 3.0이 블록체인 기반의 탈중앙화를 실현했다면, Web 4.0은 그