Every Step Matters

[프로그래머스 SQL Lv.1] 가장 큰 물고기 10마리 구하기 (MySQL) 본문

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

https://thinkcatlog.tistory.com/entry/SQL-ORDER-BY%EB%A5%BC-%ED%96%88%EC%9D%84%EB%95%8C-NULL%EC%9D%B4-%EC%9E%88%EC%9C%BC%EB%A9%B4-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%A0%95%EB%A0%AC%EB%90%A0%EA%B9%8C