728x90
구현하고 싶은 것: finished_rate가 가장 높은 행의 정보 전체를 가져오기
원하는 결과: finish_rate=1인 행의 전체 정보
oracle은 limit이 없어서 다음과 같이 적어야한다고 한다.
SELECT a.*
FROM (SELECT b.*,
rownum b_rownum
FROM (SELECT c.*
FROM some_table c
ORDER BY some_column) b
WHERE rownum <= <<upper limit>>) a
WHERE b_rownum >= <<lower limit>>
만약 upper limit과 lower limit이 존재하는 경우, 그리고 정렬된 rownum 칼럼이 필요한 경우라면 위와 같이 길게 써야하겠지만, 나같은 경우는 upper limit만 있으면 므로 더 간단하게 나타낼 수 있다.
1. finished_rate가 큰 순으로 정렬하기
SELECT * FROM tbl_class ORDER BY finished_rate desc
2. 정렬되면서 rownum도 새로 정렬되었는데, 확실히 하기 위해서 다시 확인
SELECT rownum, class_code FROM (SELECT * FROM tbl_class ORDER BY finished_rate desc)
3. 새로 정렬된 rownum대로 정보 전부 가져오기
SELECT * FROM (SELECT * FROM tbl_class ORDER BY finished_rate desc)
4. 그 중 가장 높은 1개, 즉 rownum<=1인 것만 출력
SELECT * FROM (SELECT * FROM tbl_class ORDER BY finished_rate desc) WHERE rownum <= 1
만약 이전 rownum값과 새로운 rownum 값도 불러올 필요가 있다면, 다음과 같이 불러올 수 있다.
SELECT a.*, rownum new_rownum FROM (SELECT b.*, rownum old_rownum
FROM tbl_class b
ORDER BY finished_rate desc) a
728x90
'🖥️ > DBMS' 카테고리의 다른 글
[Oracle 문법] 문자열 합치기 (concat, ||) (0) | 2023.07.05 |
---|---|
DB설계) 밥집 찾는 테이블 설계 (0) | 2023.04.10 |
SQL Select 활용(서브쿼리, group by, join) (0) | 2023.04.10 |
SQL 제약조건 (PK, FK, Unique, Check, Default) (0) | 2023.04.10 |
[MySQL] 테이블 만들기 (0) | 2023.04.10 |