【问题标题】:ORACLE How can I select 3rd and 5th highest paid employees? ORACLE HR Scheme [duplicate]ORACLE 如何选择薪酬排名第三和第五的员工? ORACLE 人力资源计划 [重复]
【发布时间】:2020-03-02 20:58:17
【问题描述】:

我用过这个,它给了我第三高的薪水。但我需要第三和第五高的薪水。

SELECT * FROM 
(
SELECT
ROWNUM, HR.DEPARTMENTS.DEPARTMENT_NAME, HR.EMPLOYEES.FIRST_NAME, HR.EMPLOYEES.LAST_NAME, HR.EMPLOYEES.SALARY 

FROM HR.EMPLOYEES 
    JOIN HR.DEPARTMENTS  ON HR.EMPLOYEES.DEPARTMENT_ID = HR.DEPARTMENTS.DEPARTMENT_ID
    WHERE (HR.DEPARTMENTS.DEPARTMENT_NAME = 'IT' OR HR.DEPARTMENTS.DEPARTMENT_NAME = 'Sales' OR HR.DEPARTMENTS.DEPARTMENT_NAME = 'Finance')
    ORDER BY HR.EMPLOYEES.SALARY desc
    )
    OFFSET 2 ROWS
    FETCH NEXT 1 ROW ONLY

我试过之后

SELECT
ROWNUM, HR.DEPARTMENTS.DEPARTMENT_NAME, HR.EMPLOYEES.FIRST_NAME, HR.EMPLOYEES.LAST_NAME, HR.EMPLOYEES.SALARY,row_number() over (order by HR.EMPLOYEES.SALARY desc) AS n

FROM HR.EMPLOYEES 
    JOIN HR.DEPARTMENTS  ON HR.EMPLOYEES.DEPARTMENT_ID = HR.DEPARTMENTS.DEPARTMENT_ID
    WHERE (HR.DEPARTMENTS.DEPARTMENT_NAME = 'IT' OR HR.DEPARTMENTS.DEPARTMENT_NAME = 'Sales' OR HR.DEPARTMENTS.DEPARTMENT_NAME = 'Finance') AND (n = 3 OR n = 5)
    ORDER BY HR.EMPLOYEES.SALARY desc

ORA-00904:“N”:无效标识符

谁能帮帮我?

【问题讨论】:

标签: sql oracle


【解决方案1】:

你必须在子查询之外使用 where:

SELECT a.* from
(SELECT ROWNUM, HR.DEPARTMENTS.DEPARTMENT_NAME, 
        HR.EMPLOYEES.FIRST_NAME, HR.EMPLOYEES.LAST_NAME, HR.EMPLOYEES.SALARY,
        row_number() over (order by HR.EMPLOYEES.SALARY desc) AS n  
FROM HR.EMPLOYEES 
    JOIN HR.DEPARTMENTS ON HR.EMPLOYEES.DEPARTMENT_ID = HR.DEPARTMENTS.DEPARTMENT_ID
    WHERE HR.DEPARTMENTS.DEPARTMENT_NAME in ('IT','Sales','Finance'))
) a 
where a.n in (3,5)

您还可以使用 IN 来简化查询。希望这会有所帮助。

【讨论】:

  • 谢谢我的朋友,它有效!!! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多