SQL 고득점 KIT

SQL 고득점 Kit: 인기있는 아이스크림

Reference: https://school.programmers.co.kr/learn/courses/30/lessons/151136 문제 설명 ✅ FIRSTHALF 테이블은 아이스크림 가게의 상반기 주문 정보를 담은 테이블입니다. FIRSTHALF 테이블 구조는

2026년 1월 12일2min read

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

문제 설명 ✅

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

#### 테이블 구조

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


문제 ✅

상반기에 판매된 아이스크림의 맛총 주문량을 기준으로 내림차순 정렬하고 총 주문량이 같다면 출하 번호를 기준으로 오름차순 정렬하여 조회하는 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 |

상반기 아이스크림 맛을 총 주문량을 기준으로 내림차순 정렬하고 총 주문량이 같은 경우 출하 번호를 기준으로 오름차순 정렬하면 chocolate, melon, white_chocolate, strawberry, mango, orange, pineapple, vanilla, caramel, peach, watermelon, mint_chocolate 순서대로 조회되어야 합니다. 따라서 SQL 문을 실행하면 다음과 같이 나와야 합니다.

| FLAVOR | | :-: | | chocolate | | melon | | white_chocolate | | strawberry | | mango | | orange | | pineapple | | vanilla | | caramel | | peach | | watermelon | | mint_chocolate |


통과한 코드 ✅

sql
SELECT FLAVOR FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID ASC

보충 ✅

Reference: https://docs.oracle.com/cd/E35976_01/server.740/es_eql/src/cidql_order_by.html

ORDER BY 절은 여러 개의 컬럼을 지정하여 정렬 우선순위를 결정할 수 있습니다. 위 문제처럼 총 주문량(TOTAL_ORDER)이 같을 때 출하 번호(SHIPMENT_ID)로 2차 정렬을 수행하는 것이 대표적인 사례입니다.

첫 번째 기준 컬럼의 값이 동일한 레코드들에 한해서만 두 번째 기준 컬럼을 적용하여 순서를 결정합니다. 각 컬럼 뒤에 ASC나 DESC를 개별적으로 지정할 수 있습니다. 하나는 내림차순, 하나는 오름차순으로 설정하는 등 자유로운 조합이 가능합니다. 정렬 방향과 상관없이 NULL 값은 항상 가장 마지막에 정렬되며, NaN 값은 NULL보다도 뒤에 위치하게 됩니다.