행 번호를 사용하여 표의 두 번째 행 선택
아래 질문을 시도해 보았습니다.
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 필터를 추가해도 레코드가 반환되지 않는 이유는 무엇입니까?
이 동작을 설명하려면 Oracle이 ROWNUM을 처리하는 방식을 이해해야 합니다.행에 ROWNUM을 할당할 때 Oracle은 1에서 시작하여 행을 선택할 때, 즉 WHERE 절의 모든 조건이 충족될 때만 값을 증가시킵니다.ROWNUM이 2보다 커야 하기 때문에 행이 선택되지 않으며 ROWNUM이 1을 초과하여 증가하지 않습니다.
결론은 다음과 같은 조건이 예상대로 작동할 것이라는 것입니다.
여기서 로넘 = 1;
여기서 로넘 < = 10;
이러한 조건을 가진 쿼리는 항상 0개의 행을 반환합니다.
여기서 로넘 = 2;
로넘 > 10;
Oracle rownum 이해에서 인용됨
작업하려면 다음 방법으로 쿼리를 수정해야 합니다.
select empno
from
(
select empno, rownum as rn
from (
select empno
from emp
order by sal desc
)
)
where rn=2;
편집: saldesc의 주문 후 로넘을 받기 위해 쿼리를 수정했습니다.
첫 번째 쿼리에서 첫 번째 행은 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
사용해 보십시오.
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
오라클에서 로넘을 사용하는 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;
Select * From (SELECT *,
ROW_NUMBER() OVER(ORDER BY column_name DESC) AS mRow
FROM table_name
WHERE condition) as TT
Where TT.mRow=2;
Oracle의 테이블에서 두 번째 행 선택
SELECT *
FROM (SELECT * FROM emp ORDER BY rownum DESC)
WHERE rownum=1
100% SQL > SELECT * FROM 스터드;
R 번호 이름 표시
104 mahesh 85
101 DHANU 20
102 BHARATH 10
100 RAJ 50
103 GOPI 65
SQL > select * from (MARCS, ROWNUM ASRS 선택 (marks descript에 의한 스터드 순서에서 * 선택)) 여기서 RS=2;
MARKS RS
65 2
SQL>
select empno
from
(
select empno,rownum as rum
from emp,
order by sal desc
)
where rum=2;
사용할 수 있습니다.RANK
또는DENSE_RANK
당신이 여기서 성취하고자 하는 것을 성취하기 위해.
이 쿼리를 100% 사용해 보십시오.
Select * from(select rownum as rn,emp.* from emp) Where rn=2;
언급URL : https://stackoverflow.com/questions/9240192/selecting-the-second-row-of-a-table-using-rownum
'programing' 카테고리의 다른 글
c#에서 iCal 파일 만들기 (0) | 2023.06.20 |
---|---|
Git 원격 오리진 설정 (0) | 2023.06.20 |
Node.js로 이메일을 보내시겠습니까? (0) | 2023.06.20 |
SQL Server 2008 - 테이블 제약 조건 가져오기 (0) | 2023.06.20 |
HttpClient에서 기본 사용자 에이전트를 설정하려면 어떻게 해야 합니까? (0) | 2023.06.20 |