SQL更新和分组依据

时间:2015-12-25 12:17:27

标签: sql oracle

我有一个表员工,列id_departament和这样的薪水:

user

我想构建一个查询,以增加 ONLY 每个部门的最高工资10%,如果加上10%后的工资高于25000,那么我的工资必须是25 000,在我的例子中,从第4部分的最高工资中加入10%后,将从24000增加到25000。

我的代码:

salary    ID
10000     3
20000     3
8000      2
5000      1
24000     4
20000     1
5000      2
7500      4

到目前为止,我有这段代码,但收到的错误是:

update angajati set salariul = case when salariul+10/100*salariul<25000 
then salariul+10/100*salariul else 25000
end where salariul = (select MAX(salariul) from angajati group by 
id_departament);

1 个答案:

答案 0 :(得分:0)

这是返回多行的查询

SELECT Max(salariul) 
FROM   angajati b 
GROUP BY id_departament

要解决此问题,您需要correlate sub-query

UPDATE angajati A
SET    salariul = CASE 
                    WHEN salariul + 10 / 100 * salariul < 25000 THEN 
                    salariul + 10 / 100 * 
                               salariul 
                    ELSE 25000 
                  END 
WHERE  salariul = (SELECT Max(salariul) 
                   FROM   angajati b 
                   WHERE  a.id_departament = b.id_departament);