如何在对其他对象进行平均时找到最大值并使用更简洁的代码
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。
问题
以领取高于公司平均工资的员工工资计算公司平均工资时,打印出支付平均工资最高的公司信息。
= 仅以高于公司平均工资的员工工资计算公司平均工资时,打印支付平均工资最高的公司信息。
所以我试过了
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。