繁体   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