Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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 ORA-00923:未在预期位置找到FROM关键字(检索部门最高2个工资)_Sql_Oracle12c - Fatal编程技术网

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;