Database/SQL
[프로그래머스 SQL Lv.1] 가장 큰 물고기 10마리 구하기 (MySQL)
imnyoung
2025. 11. 27. 10:12
문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/298517
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
1. 테이블 : FISH_INFO
| Column name | Type | Nullable |
| ID | INTEGER | FALSE |
| FISH_TYPE | INTEGER | FALSE |
| LENGTH | FLOAT | TRUE |
| TIME | DATE | FALSE |
잡은 물고기의 길이가 10cm 이하일 경우에는 LENGTH가 NULL 이며, LENGTH에 NULL 만 있는 경우는 없다.
2. 문제
FISH_INFO 테이블에서 (1) 가장 큰 물고기 10마리의 (2) ID와 길이를 출력하는 SQL 문을 작성해주세요. 결과는 (3) 길이를 기준으로 내림차순 정렬하고, (4) 길이가 같다면 물고기의 ID에 대해 오름차순 정렬해주세요. 단, 가장 큰 물고기 10마리 중 길이가 10cm 이하인 경우는 없습니다. (5) ID 컬럼명은 ID, 길이 컬럼명은 LENGTH로 해주세요.
3. 문제풀이
일단 '가장 큰 물고기 10마리 중 길이가 10cm 이하인 경우는 없다'고 명시해둔 이유는, 가장 큰 물고기 10마리의 length가 null값이 아니라는 말을 뜻한다. 이 말을 명심하면서 문제를 풀어보자.
가장 큰 물고기 10마리를 구하기 위해서는, 길이 기준 내림차순 정렬이 필요하다. 이때 든 의문은, "null값이 있는 컬럼의 정렬은 어떻게 되는가?"였다.
NULL값이 있는 컬럼을 오름차순 정렬하면 NULL값이 가장 먼저 출력되고, 내림차순 정렬하면 NULL값이 가장 마지막에 출력된다.
*만약 오름차순 정렬을 유지하면서 NULL값을 뒤로 보내고 싶다면? : [링크] 참고
이 문제에서는 길이 기준 내림차순 정렬이므로, 정렬을 하면 NULL값이 자동으로 맨 마지막으로 보내진다. 따라서 그냥 평소 하는 대로 ORDER BY를 이용하면 되고, 이후에 LIMIT로 가장 위의 10개만 출력하면 된다.
4. 정답
따라서 정답은
SELECT id, length
FROM fish_info
ORDER BY length DESC, id -- length기준 내림차순 정렬, id기준 오름차순 정렬
LIMIT 10 -- 가장 위의 10개만 출력
Reference