Получите сотрудников, которые после повышения зарплаты ниже средней - PullRequest
1 голос
/ 30 марта 2019

Мне нужно получить имя, имя, зарплату сотрудников, которые на 400,00 долларов ниже средней зарплаты даже после повышения заработной платы на 10%.

Я могу получить сотрудников, чья зарплата ниже средней зарплаты, но я не уверен, как получить тех, кто на 400 долларов ниже после повышения.

Я использую MySQL. Спасибо.

select AVG(salary) from employee; #gives me the average salary
select Fname, Lname, Salary, 1.10*Salary as NewSalary
from employee; 
#gives me names, old salary and salary raised.

Это дает мне сотрудников с зарплатой ниже средней зарплаты:

select Fname, Lname, Salary
from employee
where Salary < (select AVG(salary) from employee);

Я думал что-то вроде этого, но это не работает; неизвестный столбец новостей:

select Fname, Lname, Salary, 1.10*Salary as NewSalary
from employee
where NewSalary - (select AVG(salary) from employee) = 400 ;

Ответы [ 3 ]

1 голос
/ 30 марта 2019

У вас правильная идея, вы просто не можете использовать псевдонимы в предложении where.Просто используйте формулу напрямую, и все будет в порядке.Кроме того, вы, вероятно, должны использовать <=, а не =:

select Fname, Lname, Salary, 1.10 * Salary as NewSalary
from   employee
where  1.10 * Salary - (select AVG(salary) from employee) <= 400;
0 голосов
/ 30 марта 2019

Вы можете сделать это с помощью одного оператора, используя HAVING

select Fname, Lname, AVG(salary * 1.10)    
FROM employee
GROUP BY FNAME, LNAME 
HAVING (AVG(salary) * 1.10) = 400

Но я не понимаю понятия средней заработной платы работника в таблице. Возможно, вы ищете среднюю зарплату для группы сотрудников? Или, может быть, вы храните исторические значения заработной платы, но, опять же, я не вижу цели в расчете среднего из этого.

0 голосов
/ 30 марта 2019

выберите Fname, Lname, Salary, 1.10 * Salary как NewSalary от сотрудника где ((1,10 * зарплата) - (выберите AVG (зарплата) у сотрудника)) <= 400; </p>

...