SQL查询行数ORACLE
我想从员工表中选择第三个薪资。我写了一个查询,你们可能会在下面看到,但不幸的是它给了我0条记录。有人能在这个话题上帮我吗?我正在使用Oracle DBMS:下面是我的数据库示例: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
似乎是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谢谢您的帮助,。现在一切都清楚了谢谢你的帮助,。现在一切都清楚了