Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询行数ORACLE_Sql_Oracle_Rownum - Fatal编程技术网

SQL查询行数ORACLE

SQL查询行数ORACLE,sql,oracle,rownum,Sql,Oracle,Rownum,我想从员工表中选择第三个薪资。我写了一个查询,你们可能会在下面看到,但不幸的是它给了我0条记录。有人能在这个话题上帮我吗?我正在使用Oracle DBMS:下面是我的数据库示例: 似乎是Oracle ROWNUM,派生表没有别名。ROWNUM是为结果行计算的,因此您永远不能筛选任何大于1的ROWNUM 您需要一个标准的SQL行号: SELECT * FROM ( SELECT salary ,row_number() over (ORDER BY salary desc) as r

我想从员工表中选择第三个薪资。我写了一个查询,你们可能会在下面看到,但不幸的是它给了我0条记录。有人能在这个话题上帮我吗?我正在使用Oracle DBMS:下面是我的数据库示例:


似乎是Oracle ROWNUM,派生表没有别名。ROWNUM是为结果行计算的,因此您永远不能筛选任何大于1的ROWNUM

您需要一个标准的SQL行号:

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,但在行号之前处理,而DISTINCT在行号之后处理

编辑:

如果要使用ROWNUM,必须将其别名为:

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

似乎是Oracle ROWNUM,派生表没有别名。ROWNUM是为结果行计算的,因此您永远不能筛选任何大于1的ROWNUM

您需要一个标准的SQL行号:

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,但在行号之前处理,而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;

在标准SQL、大多数数据库和Oracle 12C+中,您可以改为使用:

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

您介意以格式化文本的形式提供一些示例输入和预期输出吗?因为我们不知道您的表结构是什么,源数据包含什么,或者您希望得到什么结果,所以很难告诉您查询是否正确,或者更改什么。我们无法神奇地查看您的数据库…您需要向我们提供有关您的场景的完整信息-谢谢。您使用的是哪种RDBMS?这样说问题太宽泛了,因为每个RDBMS的行数不同。如果没有排序的概念,SQL Server甚至没有确定的行数。另外,请标记您专门使用的DBMS,例如Oracle、MySQL、,SQL Server等。查询所需的语法或您可用的函数可能会有所不同。请从内部查询中选择ROWNUM是否介意提供一些示例输入和预期输出作为格式化文本?因为我们不知道您的表结构是什么,您的源数据包含什么或者您希望得到什么结果,很难告诉您查询是否正确,或者更改什么。我们无法神奇地查看您的数据库…您需要向我们提供有关您的场景的完整信息-谢谢。您使用的是哪种RDBMS?这样说问题太宽泛了,因为每个RDBMS的行数不同。SQL Server甚至没有确定的行数,而没有排序的概念。另外,请标记您具体使用的DBMS-例如Oracle、MySQL、SQL Server等。查询所需的语法或您可用的函数可能会有所不同。请从内部查询中选择ROWNUM谢谢您的帮助,。现在一切都清楚了谢谢你的帮助,。现在一切都清楚了