如何在对其他对象进行平均时找到最大值并使用更简洁的代码

How to find the max value when averaged over other objects and use a more concise code

问题

以领取高于公司平均工资的员工工资计算公司平均工资时,打印出支付平均工资最高的公司信息。

= 仅以高于公司平均工资的员工工资计算公司平均工资时,打印支付平均工资最高的公司信息。

所以我试过了

with avg_sal(salary) as
    (select avg(salary)
    from worker
    group by company_name)
select worker.company_name, trunc(avg(worker.salary),0) as sal_avgup
from worker, avg_sal
where worker.salary > avg_sal.salary
group by worker.company_name
order by sal_avgup desc
my output
company_name sal_avgup
Google       ...
Amazon       ...
Facebook     ...

但是在这个结果中,只需要sal_avgup的最高值。只有 google

我只需要代表给出最高薪水的公司,但是我创建的代码显示了所有公司的条件,有没有办法只提取最高值?

还有,能不能把代码简化一下?

我的版本是oracle11g

具有 2 个聚合级别和 RANK() window 函数:

with 
  avgcte as (
    select company_name, avg(salary) avgsalary
    from worker
    group by company_name
  ),
  cte as (
    select w.company_name, avg(w.salary) sal_avgup,
      rank() over (order by avg(w.salary) desc) rnk
    from worker w inner join avgcte a
    on a.company_name = w.company_name and a.avgsalary < w.salary  
    group by w.company_name
  )
select company_name, sal_avgup 
from cte
where rnk = 1

查看简化版 demo