MySQL: Как переписать элемент Select как 'y', а затем использовать его позже в операторе where - PullRequest
1 голос
/ 29 марта 2020

Так что я пытаюсь сделать это, но это не работает:

Select count(staffno)as total_staff,avg(salary),branchno
From staff
Where total_staff > 1
Group by branchno

Вот еще один пример:

Select salary,salary*1.015 as proposed_salary
From staff
Where proposed_salary > 50000

1 Ответ

0 голосов
/ 29 марта 2020

Вы не можете использовать агрегатное выражение (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
...