2015-02-05 48 views
0

我正在使用Oracle。我有表所示:STDDEV函数和条款

Company Employee salary 
    A1  Jim  122000 
... 

我想和其薪水超过2点标准差(〜> 95%)的员工数最高回报的公司。这里是我的代码

With Com_2Std as (
Select company-name, AVG(salary)+2*STDDEV(salary) as AboveS 
From works 
Group By company-name) 

Select company-name, count(employee-name) as ENumber 
From works 
Where ENumber=MAX(
Select count(a.employee-name) 
From works a, Com_2Std b 
Where a.company-name=b.company-name 
And a.salary>b.AboveS; 
Group by a.company-name) 
Group by company-name; 

我有两个quesions:

(1)我无法访问Oracle今天不能对其进行测试。请问我的代码是否正确? (2)看起来相当复杂,有什么办法可以简化它吗?

+0

不,你不能这样使用MAX()。我不愿意为你写一个Oracle版本,因为我不太熟悉它的某些语法特点。 – shawnt00 2015-02-05 22:05:08

回答

1
with Com_2Std as (
    select company-name, AVG(salary)+2*STDDEV(salary) as AboveS 
    from works 
    group by company-name 
), 
CompanyCount as (
    select a.company-name, count(*) as CountAboveS 
    from 
     works a 
     inner join Com_2Std b on a.company-name=b.company-name 
    where 
     a.salary > b.AboveS 
    group by a.company-name 
) 
select company-name 
from CompanyCount 
where CountAboveS = (select max(CountAboveS) from CompanyCount) 

这应该是接近的。它也会产生联系。

+0

谢谢。这非常有帮助。 – user4441082 2015-02-05 22:14:06