MYSQL에서는 간단하게 LIMIT 을 이용해서 출력된 결과 중
최상위부터 몇개까지의 데이터를 가져올 수 있다.
오라클에서 rownum이라는걸 지원한다고는 알고 있었고 이를 이용하면 된다고는
어렴풋이 알고있었으나 감이 잡히지 않아서 못쓰고 있던 속성이었다.
하지만 오늘 적당한 기회가 되어 직접 사용하면서
결과문을 확인해보어 알게되었다.
이력테이블에서 where 조건을 걸어서 상위 몇개만 출력하고 싶었던경우가 몇번 있었는데
그럴때마다 이력테이블의 시간 속성에 조건을 걸어주고 검색을 했었는데
이젠 그럴필요가 없어졌다.
SELECT ROWNUM, A.*
FROM (SELECT *
FROM 이력테이블 A
ORDER BY 시간속성명 DESC
) A
WHERE ROWNUM <= 3
;
바로 본론으로 말하자면
ROWNUM은 현재 쿼리의 결과에 불러온 순서마다 번호를 매겨준다.
위의 SQL문으로 예를들자면, 이력테이블에서 모든 결과를 불러온 뒤
바깥부분의 SQL문에서 각 결과에 대해 번호를 매겨준다.
이때 시간 속성에서의 값이 내림차순으로 정렬되어있으므로
현재에 대한 가장 최근시간에 대한 결과가 ROWNUM 1로 들어가게된다.
=======================================
맨처음 위의 SQL을 이용해서 알고싶었던 컬럼들을 얻기 위해서
아래의 SQL문을 사용해봤었다.
SELECT ROWNUM, A.*
FROM 이력테이블 A
WHERE ROWNUM <= 3
ORDER BY 시간속성명 DESC
;
WHERE 문이 없었다면 ORDER BY 로 인해서
내림차순으로 정렬되어 가장 밑에있을 첫번째 이력이 지속적으로 쿼리되었다.
따라서 ROWNUM이 내가 생각하고 원하던 동작을 하는것이 아니란걸 알 수 있었다.
구글링으로 오라클 내림차순 으로 검색해보면
원하지 않는 결과가 출력되서 귀찮지만 시간값으로 원하는 범위의 값들을 확인해갔었는데
이번 기회에 범위를 갯수로 출력할 수 있는 방법을 알게되서 기쁘다.
'SQL > Oracle' 카테고리의 다른 글
[Database/Oracle]오라클 테이블 스페이스 추가하기 (0) | 2022.03.04 |
---|---|
통계 데이터 생성 오류 잦은 이유 (0) | 2021.12.29 |
[Oracle] 오라클 시간더하기, 테스트용 데이터 만들기 (1) | 2021.11.12 |
만능인줄 알았던 오라클(잘되던 insert select 안될때) (0) | 2021.08.03 |
[Oracle/Tibero] merge insert 누락된 우괄호 (0) | 2021.06.02 |
댓글