Средний рост зарплаты по компании в oracle - PullRequest
0 голосов
/ 27 апреля 2020

инструкция:

Для конкретной компании c увеличьте зарплату на 30%, если зарплата меньше, чем в среднем по компании, и увеличьте ее на 10%, если зарплата выше среднее.

В таблицах также есть люди с пустыми значениями.

, поэтому я попытался

with avgs(company_name, salary) as
    (select company_name, avg(salary) avgsalary
    from work
    group by company_name)
select 
work.employee_name, work.salary,
case when work.company_name = avgs.company_name and work.salary > avgs.salary then work.salary * 1.3
     when work.company_name = avgs.company_name and work.salary < avgs.salary then work.salary * 1.1
     when work.company_name is null and work.salary is null then 0
     when avgs.company_name is null and avgs.salary is null then 0
     end as sal_up
from work, avgs

Требуемый результат - один результат на человека. Когда я запускаю это, я получаю слишком много результатов.

Какое условие неверно? Есть ли что-нибудь, о чем я не думал?

Ответы [ 2 ]

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

Используйте функции окна:

select t.*,
       (case when salary < avg_salary then salary * 1.3 else salary * 1.1 end) as new_salary
from (select w.*, avg(salary) over (partition by company_name) as avg_salary
      from work w
     ) w;

Это предполагает, что вы хотите select, потому что это пример запроса в вашем вопросе.

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

Вы можете использовать функцию windows и CASE..WHEN следующим образом:

UPDATE YOUR_TABLE TOUT
SET
    SALARY = (
        SELECT T.NEW_SAL
         FROM ( SELECT T.WORKER_NAME,
                       SALARY * CASE
                                WHEN T.SALARY > AVG(SALARY) OVER(PARTITION BY COMPANY_NAME) 
                                THEN 1.1
                                ELSE 1.3
                                END AS NEWSAL
                  FROM YOUR_TABLE T
              ) T
        WHERE TOUT.WORKER_NAME = T.WORKER_NAME)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...