Oracle SQL:查找最高工资和最低工资之间差异最大的工作的工作ID

问题描述 投票:0回答:1

我正在尝试解决一些练习,我一直坚持这个问题,我自己尝试了一些解决方案,但我一直得到像“缺少右括号”这样的错误

这是我的尝试select job_id from employees where (select max(max(salary) - min(salary) from employees as job_id)

select jobID from employees where (max(max(salary) - min(salary) as jobID)在这种情况下的错误是:ORA-00934: group function is not allowed here

此外,我不确定是否应该使用子查询解决此练习。

sql oracle
1个回答
2
投票

使用Oracle 12.1行限制子句的一种方法(with子句只是在不创建表的情况下提供虚拟数据 - 因为您已经有一个employees表,您可以将其保留并从select job_id开始):

with employees (emp_id, job_id, salary) as
     ( select 1, 10, 11000 from dual union all
       select 2, 10, 11500 from dual union all
       select 3, 20, 12000 from dual union all
       select 4, 20, 13000 from dual union all
       select 5, 30, 45000 from dual union all
       select 6, 30, 50000 from dual
)
select job_id
     , min(salary), max(salary)
     , max(salary) - min(salary) as salary_range
from   employees
group by job_id
order by salary_range desc
fetch first row only;

    JOB_ID MIN(SALARY) MAX(SALARY) SALARY_RANGE
---------- ----------- ----------- ------------
        30       45000       50000         5000

要么,

with employees (emp_id, job_id, salary) as
     ( select 1, 10, 11000 from dual union all
       select 2, 10, 11500 from dual union all
       select 3, 20, 12000 from dual union all
       select 4, 20, 13000 from dual union all
       select 5, 30, 45000 from dual union all
       select 6, 30, 50000 from dual
     )
select job_id
from   ( select job_id
             , row_number() over (order by max(salary) - min(salary) desc) as seq
         from employees
         group by job_id )
where  seq = 1
© www.soinside.com 2019 - 2024. All rights reserved.