Arc en ciel :
Alors, que Im essayant de faire est de cela, mais cela ne fonctionne pas:
Select count(staffno)as total_staff,avg(salary),branchno
From staff
Where total_staff > 1
Group by branchno
Voici un autre exemple:
Select salary,salary*1.015 as proposed_salary
From staff
Where proposed_salary > 50000
GMB:
Vous ne pouvez pas utiliser une expression d' agrégat ( sum()
, count()
, ...) dans la where
clause de la requête. Cette clause est évaluée avant les lignes sont regroupées par la group by
clause, de sorte que les agrégats ne sont pas encore disponibles.
Dans SQL, c'est le but de l' having
article:
select count(staffno) as total_staff, avg(salary), branchno
from staff
having count(staffno) > 1 -- MySQL also allows "total_staff > 1"
group by branchno
Quant à la deuxième requête: l'alias défini dans la select
clause ne sont pas disponibles dans la where
clause soit (pour la même raison que ci - dessus). Vous pouvez répéter l'expression:
select salary, salary * 1.015 as proposed_salary
from staff
where salary * 1.015 > 50000
Ou vous pouvez utiliser une table dérivée (cte ou sous-requête):
select *
from (
select salary, salary * 1.015 as proposed_salary
from staff
) t
where proposed_salary > 5000