Как найти максимальное значение при усреднении по другим объектам и использовать более лаконичный код - PullRequest
0 голосов
/ 27 апреля 2020

Вопрос

Распечатайте информацию о компании, которая платит самую высокую среднюю заработную плату при расчете средней заработной платы компании по заработной плате сотрудников, которые получают больше, чем средняя заработная плата компании.

= При расчете средней заработной платы компании с заработной платой только сотрудников, которые получают больше, чем средняя заработная плата компании, распечатайте информацию о компании, которая платит самую высокую среднюю заработную плату.

, поэтому я пробовал

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

1 Ответ

2 голосов
/ 27 апреля 2020

С 2 уровнями агрегации и RANK() оконной функцией:

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

См. Упрощенную демонстрацию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...