programing

Oracle에서 톱1을 달성하려면 어떻게 해야 합니까?

newstyles 2023. 3. 10. 21:19

Oracle에서 톱1을 달성하려면 어떻게 해야 합니까?

어떻게 하면 좋을까요?

select top 1 Fname from MyTbl

Oracle 11g?

처음 선택한 행만 원하는 경우 다음을 수행할 수 있습니다.

select fname from MyTbl where rownum = 1

분석 함수를 사용하여 상위 x:를 주문하고 가져올 수도 있습니다.

select max(fname) over (rank() order by some_factor) from MyTbl
SELECT *
  FROM (SELECT * FROM MyTbl ORDER BY Fname )
 WHERE ROWNUM = 1;

Oracle 12c(2013년 6월)에서는 다음과 같이 사용할 수 있습니다.

SELECT * FROM   MYTABLE
--ORDER BY COLUMNNAME -OPTIONAL          
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY

사용할 수 있습니다.ROW_NUMBER()와 함께ORDER BY하위 절의 절을 사용하여 이 열을 대체하십시오.TOP N. 이것은 차근차근 설명할 수 있습니다.

두 개의 열이 있는 아래 표를 참조하십시오.NAME그리고.DT_CREATED.

여기에 이미지 설명 입력

만약 당신이 처음 두 날짜만 가져가야 한다면NAME, 다음 쿼리를 사용할 수 있습니다.이 논리는 쿼리 내부에 작성되었습니다.

-- The number of records can be specified in WHERE clause
SELECT RNO,NAME,DT_CREATED
FROM
(
    -- Generates numbers in a column in sequence in the order of date
    SELECT ROW_NUMBER() OVER (ORDER BY DT_CREATED) AS RNO,
    NAME,DT_CREATED
    FROM DEMOTOP
)TAB
WHERE RNO<3;

결과

여기에 이미지 설명 입력

상황에 따라서는,TOP N각각의 결과NAME이 경우,PARTITION BY와 함께ORDER BY하위 절의 절아래 쿼리를 참조하십시오.

-- The number of records can be specified in WHERE clause
SELECT RNO,NAME,DT_CREATED
FROM
(
  --Generates numbers in a column in sequence in the order of date for each NAME
    SELECT ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY DT_CREATED) AS RNO,
    NAME,DT_CREATED
    FROM DEMOTOP
)TAB
WHERE RNO<3;

결과

여기에 이미지 설명 입력

select * from (
    select FName from MyTbl
)
where rownum <= 1;

뭐 이런 거 할 수 있어요

    SELECT *
      FROM (SELECT Fname FROM MyTbl ORDER BY Fname )
 WHERE rownum = 1;

분석 함수 RANK 및/또는 DEXINK를 사용할 수도 있지만 ROWNUM이 가장 쉽습니다.

용도:

SELECT x.*
  FROM (SELECT fname 
          FROM MyTbl) x
 WHERE ROWNUM = 1

Oracle9i+를 사용하는 경우 ROW_NUMBER()와 같은 분석 함수를 사용할 수 있지만 ROWNUM만큼 수행되지는 않습니다.

저도 같은 문제가 있었습니다.이 문제를 해결할 수 있는 방법은 다음과 같습니다.

select a.*, rownum 
from (select Fname from MyTbl order by Fname DESC) a
where
rownum = 1

첫 번째 값이 맨 위에 오도록 결과를 정렬할 수 있습니다.

행운을 빌어요

테이블에서 첫 번째 행을 선택하는 것과 테이블에서 한 행을 선택하는 것은 서로 다른 작업이며 다른 쿼리가 필요합니다.그렇게 하는 방법은 여러 가지가 있다.그 중 4개는 다음과 같습니다.

첫번째

select  max(Fname) from MyTbl;

둘째

select  min(Fname) from MyTbl;

셋째

select  Fname from MyTbl  where rownum = 1;

넷째

select  max(Fname) from MyTbl where rowid=(select  max(rowid) from MyTbl)

언급URL : https://stackoverflow.com/questions/3451534/how-do-i-do-top-1-in-oracle