상위 n개 레코드
https://school.programmers.co.kr/learn/courses/30/lessons/59405?language=oracle
- 문제 풀이
서브쿼리와 MIN 함수 사용
1 2 3
SELECT NAME FROM ANIMAL_INS WHERE DATETIME = (SELECT MIN(DATETIME) FROM ANIMAL_INS);
ANIMAL_INS
테이블에서 가장 먼저 들어온 동물의 보호 시작일(DATETIME
)이 가장 이른 날짜와 동일한 동물의 이름을 반환한다.- 이 쿼리는 보호소에 가장 먼저 들어온 동물의 이름을 조회하는데 사용될 수 있지만, 주의해야 할 부분이 있다.
- 만약 여러 동물이 같은 최초 시간에 들어온 경우, 그 중 하나만을 랜덤하게 선택해서 반환하게 된다.
- 동일한 시간에 들어온 여러 동물 중 하나만 필요하다면 이 쿼리를 사용할 수 있다. 하지만 만약 여러 동물이 동일한 시간에 들어왔을 때 모두를 필요로 한다면, 다른 방법을 사용해야 한다.
ORDER BY와 FETCH FIRST 사용
1 2 3 4
SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME FETCH FIRST 1 ROWS ONLY;
- 보호소에 들어온 동물 중에서 가장 먼저 들어온 동물을 보호 시작일(
DATETIME
)을 기준으로 오름차순 정렬하고, 그 중 첫 번째 행을 반환한다.
1 2 3 4 5 6
SELECT * FROM(SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME ASC ) WHERE ROWNUM = 1;
- Oracle의 경우
ROWNUM
이 적용되는 시점 때문에 조심해야 한다.ANIMAL_INS
테이블에서 이름을 보호 시작일(DATETIME
)을 기준으로 오름차순으로 정렬한 후,- 외부에서 이를 조회할 때 처음 한 개의 행만 반환한다.
- 이 방법은
ROWNUM
이 적용되는 타이밍에 따라 예상과 다른 결과를 보일 수 있다. 특히, 외부 쿼리에서ROWNUM
을 적용하기 전에 정렬이 이루어져야 올바른 결과를 얻을 수 있다. 이러한 이유로 이 방법은 정확한 결과를 보장하기 어려울 수 있다. 좀 더 일관된 결과를 얻기 위해서는 서브쿼리나FETCH FIRST
와 같은 다른 방식을 사용하는 것이 좋다.
- 보호소에 들어온 동물 중에서 가장 먼저 들어온 동물을 보호 시작일(
- 실행 결과
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.