Поделиться через


Как использовать предложения 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 в статистическом запросе

  1. Укажите группы для запроса. Подробности см. в разделе Как сгруппировать строки в результатах запроса (визуальные инструменты для баз данных).

  2. Если столбец, на котором основывается условие WHERE, находится не в области критериев, то добавьте его в область критериев.

  3. Очистите столбец Output, если столбец данных не является частью предложения GROUP BY или не входит в статистическую функцию.

  4. В столбце Фильтр укажите предложение 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'
    
  5. В столбце Группировать выберите 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