programing

행 번호를 사용하여 표의 두 번째 행 선택

muds 2023. 6. 20. 21:52
반응형

행 번호를 사용하여 표의 두 번째 행 선택

아래 질문을 시도해 보았습니다.

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

반응형