簡體   English   中英

#SQL#查詢#行#ORACLE

[英]#SQL #QUERY #ROWNUM #ORACLE

我想從TABLE員工中選擇3rd薪水。 正如您在下面看到的那樣,我已經寫了QUERY,但是很遺憾,它給了我0條記錄。 有人可以幫我這個話題嗎? 我正在使用Oracle DBMS :),這是我的數據庫示例: SQL Fiddle

SELECT *
FROM 
  (SELECT ROWNUM, salary 
  FROM 
    (SELECT DISTINCT salary 
    FROM employees
    ORDER BY salary desc)
  )
WHERE ROWNUM = 3;

似乎是Oracle(ROWNUM,並且派生表沒有別名)。 ROWNUM是針對結果行計算得出的 ,因此,您絕不能為任何大於1的ROWNUM進行過濾。

您需要標准SQL ROW_NUMBER:

SELECT *
FROM
 ( SELECT salary
      ,row_number() over (ORDER BY salary desc) as rn 
   FROM employees
   GROUP BY salary
 ) dt
WHERE rn = 3;

GROUP BY等效於DISTINCT,但 ROW_NUMBER 之前處理而DISTINCT 在之后處理。

編輯:

如果要使用ROWNUM,則必須使用別名:

SELECT *
FROM 
  (SELECT ROWNUM as rn, salary 
  FROM 
    (SELECT DISTINCT salary 
    FROM employees
    ORDER BY salary desc)
  )
WHERE rn = 3;

在標准SQL,大多數數據庫和Oracle 12C +中,您可以改為使用:

SELECT DISTINCT salary 
FROM employees
ORDER BY salary desc
OFFSET 2 ROWS FETCH NEXT 1 ROW ONLY;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM