0
select * from(select e.*,dense_rank() over(partition by dept_name order by salary desc) as Top_salaried
from employee e) as B where Top_salaried <= 3;

我有上面的查询从上面的每个部门获取前 3 名薪水工作正常 PostgreSQL

当我尝试在 oracle 中执行相同的操作时,它会引发错误

SQL 命令未正确结束

任何人都可以帮我解决这个问题我需要如何在 oracle 中修改它

4

1 回答 1

0

在 Oracle 中,别名不允许AS关键字(但列别名允许,例如as top_salaried)。所以:

SELECT *
  FROM (SELECT e.*,
               DENSE_RANK ()
                  OVER (PARTITION BY dept_name ORDER BY salary DESC)   AS top_salaried
          FROM employee e) b   --> no "as" here
 WHERE top_salaried <= 3;
于 2022-02-03T10:40:51.817 回答