Как использовать предложения 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_id
WHERE publishers.state = 'CA'
GROUP BY titles.pub_id
HAVING 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_id GROUP BY titles.pub_id HAVING 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_id WHERE publishers.state = 'CA' GROUP BY titles.pub_id
См. также
Другие ресурсы
Сортировка и группирование результатов запроса (визуальные инструменты для баз данных)
Формирование итоговых результатов запросов (визуальные инструменты для баз данных)