반응형
※ 문제
※ 코드
-- 코드를 작성해주세요
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까지의 데이터만 남게 됩니다.
반응형
'DBMS' 카테고리의 다른 글
[프로그래머스 SQL] Lv. 1 잔챙이 잡은 수 구하기 (0) | 2025.02.27 |
---|---|
[프로그래머스 SQL] Lv. 1 모든 레코드 조회하기 (0) | 2025.02.26 |
[프로그래머스 SQL] Lv. 1 조거에 맞는 도서 리스트 출력하기 (0) | 2025.02.26 |
[프로그래머스 SQL] Lv. 1 잡은 물고기의 평균 길이 구하기 (0) | 2025.02.26 |
[프로그래머스 SQL] Lv. 1 한 해에 잡은 물고기 수 구하기 (0) | 2025.02.26 |