甲骨文公司平均工资增长

Average salary increase by company in oracle

指令是

具体公司,工资低于公司平均水平加薪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

我要的结果是一人一个。当我 运行 这个时,我得到了太多的结果。

哪个条件不对?有什么我没有想到的吗?

使用window函数:

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,因为这是您问题中的示例查询。

您可以使用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)