Вы не можете использовать агрегатное выражение (sum()
, count()
, ...) в предложении where
запроса. Это предложение оценивается до того, как строки сгруппированы по предложению group by
, поэтому агрегаты еще не доступны.
В SQL это цель предложения having
:
select count(staffno) as total_staff, avg(salary), branchno
from staff
having count(staffno) > 1 -- MySQL also allows "total_staff > 1"
group by branchno
Что касается второго запроса: псевдоним, определенный в предложении select
, также недоступен в предложении where
(по той же причине, что и выше). Вы можете повторить выражение:
select salary, salary * 1.015 as proposed_salary
from staff
where salary * 1.015 > 50000
Или вы можете использовать производную таблицу (cte или подзапрос):
select *
from (
select salary, salary * 1.015 as proposed_salary
from staff
) t
where proposed_salary > 5000