2015-02-05 1 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) Я не могу получить доступ к оракулу сегодня и не может проверить его. Правильно ли мой код?

(2) Это выглядит довольно сложно, чтобы упростить его, пожалуйста?

+0

Нет, вы не можете использовать MAX() таким образом. Я стесняюсь попробовать написать версию Oracle для вас, так как я менее знаком с некоторыми ее особенностями в синтаксисе. – shawnt00

ответ

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

Смежные вопросы