Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В некоторых случаях может потребоваться исключить отдельные строки из групп (с помощью предложения 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.
Очистите столбец выходных данных, если столбец данных не является частью оператора 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'В столбце Группировать по выберите Где из списка параметров группы и сводки. Конструктор запросов и представлений удаляет условие из предложения 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
См. также
Результаты сортировки и группового запроса (визуальные инструменты базы данных)
сводка результатов запроса (визуальные инструменты базы данных)