Sql ORA-00923:未在预期位置找到FROM关键字(检索部门最高2个工资)
我试图从每个部门获得最高的两份薪水。但是我犯了错误!请帮忙,我会很感激的,谢谢Sql ORA-00923:未在预期位置找到FROM关键字(检索部门最高2个工资),sql,oracle12c,Sql,Oracle12c,我试图从每个部门获得最高的两份薪水。但是我犯了错误!请帮忙,我会很感激的,谢谢 CREATE TABLE emp_h ( Dept varchar(100), Emp varchar(100), Sal numeric(18,2) ) 值插入下表中 SELECT * FROM emp_h DEPT EMP SAL Comp A 6000 Comp B 7000 Comp C 10000 Comp D
CREATE TABLE emp_h ( Dept varchar(100), Emp varchar(100), Sal numeric(18,2) )
值插入下表中
SELECT * FROM emp_h
DEPT EMP SAL
Comp A 6000
Comp B 7000
Comp C 10000
Comp D 9000
Elec P 2000
Elec Q 10000
Elec R 11000
Eng AA 15000
Eng BB 2000
Eng BB 7000
Eng BB 3000
我想要输出部门的最高工资前2名
Dept Emp Sal
----------------------------
Comp C 10000
Comp D 9000
Elec R 11000
Elec Q 10000
Eng AA 15000
Eng BB 7000
现在,我运行此查询以检索每个部门最高的2个薪资:
SELECT * FROM(SELECT RANK() OVER (PARTITION BY DEPT ORDER BY SAL DESC) AS 'Rank', * FROM emp_h) AS A WHERE RANK <= 2
Oracle希望您在行中有任何其他列时对*进行限定。所以试试这个:
SELECT e.*
FROM (SELECT RANK() OVER (PARTITION BY DEPT ORDER BY SAL DESC) AS rnk, e.*
FROM emp_h e
) e
WHERE rnk <= 2;
你确定你可以在排名后使用*。。。功能?我想是的。请更正我的错误。如果删除,*是否有效?如果这样做有效,那么尝试在秩列之前使用*。如果没有,那么您需要显式地引用emp_h.No中的列。它不起作用了。我想我需要考虑编写查询的任何其他过程:@cowbert-the*在选择列表中的任何位置都有效,但它必须是限定的,除非它是列表中唯一的项。对不起!这是我得到的结果:ORA-00904:E:无效标识符00904。00000-%s:无效标识符*原因:*操作:第31行第3列出错您正在查找emp_h.*抱歉!我使用emp_h.*运行,但以下是结果ORA-00904:emp_h:无效标识符00904。00000-%s:无效标识符*原因:*操作:第30行错误列:78从emp\u h中选择*---------部门emp SAL Comp A 6000 Comp B 7000 Comp C 10000 Comp D 9000电气P 2000电气Q 10000电气R 11000 Eng AA 15000 Eng BB 2000 Eng BB7000工程BB 3000
SELECT e.*
FROM (SELECT RANK() OVER (PARTITION BY DEPT ORDER BY SAL DESC) AS rnk, e.*
FROM emp_h e
) e
WHERE rnk <= 2;