👇 과일로 만든 아이스크림 고르기
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
🔓 문제 설명
상반기에 판매된 아이스크림의 맛을 총주문량을 기준으로 내림차순 정렬하고 총주문량이 같다면 출하 번호를 기준으로 오름차순 정렬하여 조회하는 SQL 문을 작성해주세요.
예시 문제 데이터
[FIRST_HALF (주문 정보)]
| SHIPMENT_ID | FLAVOR | TOTAL_ORDER |
| 105 | white_chocolate | 3100 |
| 109 | strawberry | 3100 |
| 110 | melon | 3150 |
[ICECREAM_INFO (성분 정보)]
| FLAVOR | INGREDIENT_TYPE |
| white_chocolate | sugar_based |
| strawberry | fruit_based |
| melon | fruit_based |
⚡SQL Query
SELECT F.FLAVOR
FROM FIRST_HALF F
JOIN ICECREAM_INFO I ON F.FLAVOR = I.FLAVOR
WHERE F.TOTAL_ORDER > 3000
AND I.INGREDIENT_TYPE = 'fruit_based'
ORDER BY F.TOTAL_ORDER DESC;
🔎 풀이 설명
1. 테이블 조인 : 공통 컬럼인 FLAVOR를 기준으로 두 개의 테이블을 결합했습니다.
2. 복합 조건 필터링
3. 내림차순
💡인사이트
1. NL Join vs Hash Join
- 데이터량이 적을 때는 NL Join이 효율적입니다.
- 만약 두 테이블이 매우 크다면 옵티마이저는 해시 테이블을 생성하는 Hash Join을 선택할 가능성이 높습니다.
2. 인덱스 설계를 통한 정렬 제거
- 성능을 극대화하려면 FIRST_HALF 테이블에 [TOTAL_ORDER + FLAVOR] 결합 인덱스를 구성하여 3,000 이상인 데이터를 먼저 거르고 조인에 참여시키는 전략을 쓸 수 있습니다.
'🗄️ DB_이야기 > # ⚡SQL' 카테고리의 다른 글
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 흉부외과 또는 일반외과 의사 목록 출력하기(SELECT) (0) | 2026.04.13 |
|---|---|
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 조건에 맞는 도서 리스트 출력하기(SELECT) (0) | 2026.04.13 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 12세 이하인 여자 환자 목록 출력하기(SELECT) (1) | 2026.04.13 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 인기있는 아이스크림(SELECT) (0) | 2026.04.10 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 조건에 맞는 도서 리스트 출력하기(SELECT) (0) | 2026.04.10 |