본문 바로가기
DBMS

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

by floral1215 2025. 2. 26.
반응형

※ 문제

 

※ 코드

-- 코드를 작성해주세요
SELECT      ID, LENGTH
FROM        FISH_INFO
ORDER BY    IFNULL(LENGTH, 10) DESC, ID
LIMIT       10;

 

※ 풀이

우선 LENGTH가 NULLABLE이므로 정렬을 할 때, IFNULL을 통해 10으로 값을 대체해준 뒤 정렬을 진행합니다.

(만약 NULL 값을 대체하지 않고 정렬을 한다면 NULL 값을 가진 Row는 자동으로 맨 밑으로 밀려납니다.)

 

이후 상위 10개의 Row만 출력해주면 되는데 MySQL에서는 LINIT이라는 키워드를 사용하여 원하는 행만큼 가져올 수 있습니다.

 

키워드가 하나인 경우 상위 N개, 2개인 경우 N+1부터 M개가 됩니다.

예시)

LIMIT 11 => 상위 11개

LIMIT 10, 12 => 11번 Row부터 12개 (즉, 11~22까지)

 

다음으로 ORACLE 같은 경우엔 LIMIT이 아니라 ROWNUM을 사용하여야 합니다.

예시)

WHERE ROWNUM <= 10

WHERE ROWNUM = 2

 

마지막으로 중간 범위 같은 경우엔 좀 복잡한데...

SELECT	*
FROM	(SELECT ROWNUM AS RNUM, A.*
		 FROM	(SELECT * FROM DUMMY_TABLE) A
         WHERE	ROWNUM <= 10 + 20)
WHERE	RNUM > 10;

위와 같이 작성하면 됩니다. 먼저 구하고자 하는 범위가 11~30이 되는거구요.

먼저 10+20. 즉, 30까지 잘라놓은 테이블을 먼저 만들어서 FROM 절에 가져옵니다.

(이때, RNUM이라는 속성을 하나 만들어줍니다.)

 

그리고 WHERE 조건문을 통해 RNUM이 10 이상인 행을 들고오면 원래 테이블에서 11~30까지의 데이터만 남게 됩니다.

반응형