Как использовать предложения HAVING и WHERE в одном запросе (визуальные инструменты для баз данных)
В некоторых экземплярах может понадобиться исключить отдельные строки из групп (с использованием предложения WHERE) до того, как применять условие к группе как к целому (с использованием предложения HAVING).
Предложение HAVING подобно предложению WHERE, но применимо только к целым группам (то есть к строкам в результирующем наборе, представляющим собой группы), тогда как предложение WHERE применимо к отдельным строкам. В запросе могут содержаться оба предложения: WHERE и HAVING. В этом случае:
Предложение WHERE применяется сначала к отдельным строкам таблиц или возвращающих табличное значение объектов в области схем. Группируются только строки, которые удовлетворяют условиям в предложении WHERE.
Затем предложение HAVING применяется к строкам в результирующем наборе. Только строки, которые удовлетворяют условиям HAVING, появляются в результирующем запросе. Можно применить предложение HAVING только к тем столбцам, которые появляются в предложении GROUP BY или статистической функции.
Например, соединяются таблицы titles и publishers для создания запроса, в котором показана средняя цена книги для группы издателей. Требуется средняя цена книги только определенной группы издателей — например только издателей в штате Калифорния. При этом нужно показать только те средние цены, которые превышают $10,00.
Первое условие можно задать с помощью предложения WHERE, которое устраняет всех издателей не из Калифорнии перед тем, как начать вычисление средней цены. Второе условие требует предложения HAVING, так как условие основано на результатах группирования и сводных данных. Конечная инструкция SQL может выглядеть следующим образом:
SELECT titles.pub_id, AVG(titles.price)FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_idWHERE publishers.state = 'CA'GROUP BY titles.pub_idHAVING AVG(price) > 10
Можно создать оба предложения HAVING и WHERE в области критериев. По умолчанию любое заданное условие поиска для столбца становится частью предложения HAVING. Однако можно изменить условие, сделав его предложением WHERE.
Можно создать предложение WHERE и HAVING для одного и того же столбца. Для этого необходимо дважды добавить столбец в область критериев, затем указать один экземпляр как часть предложения HAVING и другой экземпляр как часть предложения WHERE.
Задание условия WHERE в статистическом запросе
Укажите группы для запроса. Подробности см. в разделе Как сгруппировать строки в результатах запроса (визуальные инструменты для баз данных).
Если столбец, на котором основывается условие WHERE, находится не в области критериев, то добавьте его в область критериев.
Очистите столбец Output, если столбец данных не является частью предложения GROUP BY или не входит в статистическую функцию.
В столбце Фильтр укажите предложение WHERE. Конструктор запросов и представлений добавляет условие в предложение HAVING инструкции SQL.
Примечание В качестве примера данной процедуры показан запрос, соединяющий две таблицы titles и publishers.
В этой точке в запросе инструкции SQL содержится предложение HAVING:
SELECT titles.pub_id, AVG(titles.price)FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_idGROUP BY titles.pub_idHAVING publishers.state = 'CA'
В столбце Группировать выберите Where из списка параметров группировки и сводки. Конструктор запросов и представлений удаляет условие из предложения HAVING инструкции SQL и добавляет его в предложение WHERE.
Инструкция SQL изменяется, теперь она содержит предложение WHERE:
SELECT titles.pub_id, AVG(titles.price)FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_idWHERE publishers.state = 'CA'GROUP BY titles.pub_id