[SQL] 테이블 사용 ROWNUM의 두 번째 행을 선택
SQL테이블 사용 ROWNUM의 두 번째 행을 선택
나는 아래의 쿼리를 시도했다 :
select empno from (
select empno
from emp
order by sal desc
)
where rownum = 2
이 모든 레코드를 반환하지 않습니다.
언제이 쿼리를 시도
select rownum,empno from (
select empno from emp order by sal desc)
그것은 나에게이 출력을 제공합니다 :
ROWNUM EMPNO
1 7802
2 7809
3 7813
4 7823
사람이 내 첫 번째 쿼리의 문제 무엇을 말해 줄 수 있습니까? 나는 ROWNUM 필터를 추가 할 때 왜 모든 레코드를 반환하지 않습니다?
해결법
-
==============================
1.이해 오라클 ROWNUM에서 인용
이해 오라클 ROWNUM에서 인용
당신은 작업을 위해이 방법을 쿼리를 수정해야합니다 :
select empno from ( select empno, rownum as rn from ( select empno from emp order by sal desc ) ) where rn=2;
편집 : 나는 샐 내림차순으로 주문 후 ROWNUM을 얻기 위해 쿼리를 수정했습니다
-
==============================
2.제 질의에서, 첫 번째 행 ROWNUM = 1이므로 거부 될 것이다. 두 번째 행은 (로우 전에 거부 되었기 때문에)도 거절 ROWNUM = 1, 세 번째 행은 또한 ROWNUM = 1도 및 (가 거부되기 전에 모든 행하기 때문에) 거절 등 ... 순있을 것이다 것 결과는 모든 행이 거부된다는 점이다.
제 질의에서, 첫 번째 행 ROWNUM = 1이므로 거부 될 것이다. 두 번째 행은 (로우 전에 거부 되었기 때문에)도 거절 ROWNUM = 1, 세 번째 행은 또한 ROWNUM = 1도 및 (가 거부되기 전에 모든 행하기 때문에) 거절 등 ... 순있을 것이다 것 결과는 모든 행이 거부된다는 점이다.
두 번째 쿼리는 얻은 결과를 반환하지 않아야합니다. 그것은 ORDER BY 후 제대로 할당 ROWNUM을해야한다.
모든이의 결과로,이 같은 하위 쿼리의하지 2 만 3 레벨을 사용할 필요가 :
SELECT EMPNO, SAL FROM ( -- Make sure row is not rejected before next ROWNUM can be assigned. SELECT EMPNO, SAL, ROWNUM R FROM ( -- Make sure ROWNUM is assigned after ORDER BY. SELECT EMPNO, SAL FROM EMP ORDER BY SAL DESC ) ) WHERE R = 2
결과:
EMPNO SAL ---------------------- ---------------------- 3 7813
-
==============================
3.이 시도:
이 시도:
SELECT ROW_NUMBER() OVER (ORDER BY empno) AS RowNum, empno FROM tableName WHERE RowNumber = 2;
소스 코드 조각 :
SELECT last_name FROM (SELECT last_name, ROW_NUMBER() OVER (ORDER BY last_name) R FROM employees) WHERE R BETWEEN 51 and 100
참고
-
==============================
4.오라클에서 ROWNUM을 사용하여 n 번째 행의 경우 :
오라클에서 ROWNUM을 사용하여 n 번째 행의 경우 :
select * from TEST WHERE ROWNUM<=n MINUS select * from TEST WHERE ROWNUM<=(n-1);
두 번째 행의 예 :
select * from TEST WHERE ROWNUM<=2 MINUS select * from TEST WHERE ROWNUM<=1;
-
==============================
5.(에서 EMPNO 선택 럼으로 EMPNO, ROWNUM을 선택 EMP에서, SAL DESC 의해 주문 ) 여기서 럼 = 2;
(에서 EMPNO 선택 럼으로 EMPNO, ROWNUM을 선택 EMP에서, SAL DESC 의해 주문 ) 여기서 럼 = 2;
-
==============================
6.
Select * From (SELECT *, ROW_NUMBER() OVER(ORDER BY column_name DESC) AS mRow FROM table_name WHERE condition) as TT Where TT.mRow=2;
-
==============================
7.오라클의 테이블에서 두 번째 행을 선택
오라클의 테이블에서 두 번째 행을 선택
SELECT * FROM (SELECT * FROM emp ORDER BY rownum DESC) WHERE rownum=1
-
==============================
8.당신은 당신이 달성하려고하는 것을 달성하기 위해 RANK 또는 DENSE_RANK를 사용할 수 있습니다.
당신은 당신이 달성하려고하는 것을 달성하기 위해 RANK 또는 DENSE_RANK를 사용할 수 있습니다.
from https://stackoverflow.com/questions/9240192/selecting-the-second-row-of-a-table-using-rownum by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 SQL에서 INSERT에 대한 중복 값을 피하기 위해? (0) | 2020.04.16 |
---|---|
[SQL] 단지 MySQL의 쿼리를 사용하여 중복 제거? (0) | 2020.04.16 |
[SQL] 포스트 그레스 대소 문자 구분 (0) | 2020.04.16 |
[SQL] MySQL의 테이블에서 중복을 삭제하는 방법 (0) | 2020.04.16 |
[SQL] 포스트 그레스 어레이에 데이터를 선택 (0) | 2020.04.16 |