-
[프로그래머스] 상위 n개 레코드 ORACLE SQL코딩테스트 준비/SQL 2024. 10. 7. 23:14
https://school.programmers.co.kr/learn/courses/30/lessons/59405
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.
풀이1
간단한 문제이지만 오라클로 풀 경우, 쿼리 실행 순서를 파악해야 헷갈리지 않고 문제를 풀 수 있다.
쿼리 실행 순서는 FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY 순이다.
이것을 염두하지 않고 아래와 같이 쿼리를 짰을 경우, ORDER BY로 순서를 정한 것 중에 하나가 아니라
FROM에서 검색된 결과 중 하나를 고르고(ROWNUM=1) ORDER BY를 하기 때문에 원하는 결과를 구할 수 없다.
SELECT NAME -- (3) SELECT FROM ANIMAL_INS -- (1) FROM WHERE ROWNUM =1 -- (2) WHERE => ORDER BY보다 WHERE 절이 먼저 실행되어 원하는 결과가 안나옴 ORDER BY DATETIME -- (4) ORDER BY
따라서, 먼저 정렬된 서브 쿼리를 FROM으로 불려오게 되면 원하는 순서대로 실행할 수 있다.
SELECT NAME -- (6) FROM ( -- (4) SELECT * -- (2) FROM ANIMAL_INS -- (1) ORDER BY DATETIME -- (3) ROWNUM =1 보다 먼저 실행됨 ) WHERE ROWNUM = 1 -- (5)
※ 참고로 MYSQL은 LIMIT 절이 ORDER BY 보다 늦게 실행되므로 쉽게 구할 수 있다.
'코딩테스트 준비 > SQL' 카테고리의 다른 글
[프로그래머스] 업그레이드 된 아이템 구하기 Mysql (0) 2024.10.14 [프로그래머스] 오프라인/온라인 판매 데이터 통합하기 Oracle (1) 2024.10.09 [프로그래머스] 서울에 위치한 식당 목록 출력하기 ORACLE (4) 2024.10.06 [프로그래머스] 강원도에 위치한 생산공장 목록 출력하기 (2) 2024.10.06 [프로그래머스] 특정 형질을 가지는 대장균 찾기 MYSQL SQL (2) 2024.10.03