甲骨文公司平均工资增长
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)
指令是
具体公司,工资低于公司平均水平加薪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)