2015-01-27 2 views

ответ

14

Агрегат может не отображаться в предложении 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.

+0

Почему это так? почему счетчик (*) можно использовать в разделе where? –

+0

@jaig: Вы не можете использовать 'count (*)' в where where. См. Редактирование в моем ответе. –

+0

еще одно сомнение ... почему я не могу сделать следующее: выберите * у персонала, имеющего зарплату> avg (зарплата), но я могу сделать следующее: выберите * у персонала, имеющего зарплату> 200 –

Смежные вопросы