So I'm given a practice query to increase or UPDATE employees salaries by 20% if their rating is above 5.
UPDATE company
SET salary = (salary salary * 20/100)
WHERE rating > 5;
SELECT * FROM company;
My question is,why is it correct to write this part of the code (salary salary) and simply not (salary * 20/100). Thank you.
CodePudding user response:
To increase the salary by 20%, you have to add 20% of the salary to the old salary. For instance, if the salary is 100, you add 20 to to get the new salary 120.
To calculate 20% of something, you multiply it by 20/100. So salary * 20/100 is 20% of the salary.
Then you add this to the old salary, so the complete formula is salary (salary * 20/100).
If you just multiply the salary by 20/100, the result would be 20, not 120.
CodePudding user response:
This is nothing more than elementary mathematics.
Consider what your statement is currently doing: salary = (salary salary * 20/100)
Fortunately, because of order of precedence, multiplication and division is followed by addition, not vice-versa, so you can also read it as salary = salary (salary * (20/100))
20 divided by 100 is 0.2 (ie 20%) so if you simply had salary = salary * 0.2 you can see you'd have 20% of the original salary - not what you want, so you add this 20% to the existing salary to result in the original salary plus 20%.
The more common approach - I believe - is the equivalent and more obvious salary = salary * 1.2, ie multiply the value by itself plus 0.2 of its value.
It follows that you could reverse this to remove 20% by dividing by 1.2
