Агрегат может не отображаться в предложении WHERE
, если он не находится в подзапросе, содержащемся в предложении HAVING
или списке выбора, а агрегированный столбец является внешней ссылкой.
Пример использование WHERE
пункта:
select *
from staff
where salary > (select avg(salary) from staff)
пример с использованием HAVING
пункта:
select deptid,COUNT(*) as TotalCount
from staff
group by deptid
having count(*) > 2
Having
пункта определяет условие поиска для группы или совокупности. HAVING
может использоваться только с инструкцией SELECT
. HAVING
обычно используется в предложении GROUP BY
. Когда GROUP BY
не используется, HAVING
ведет себя как статья WHERE
.
Почему это так? почему счетчик (*) можно использовать в разделе where? –
@jaig: Вы не можете использовать 'count (*)' в where where. См. Редактирование в моем ответе. –
еще одно сомнение ... почему я не могу сделать следующее: выберите * у персонала, имеющего зарплату> avg (зарплата), но я могу сделать следующее: выберите * у персонала, имеющего зарплату> 200 –