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


Использование предложений 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 в агрегатном запросе

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

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

  3. Очистите столбец выходных данных, если столбец данных не является частью оператора 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_id  
    GROUP BY titles.pub_id  
    HAVING publishers.state = 'CA'  
    
  5. В столбце Группировать по выберите Где из списка параметров группы и сводки. Конструктор запросов и представлений удаляет условие из предложения 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  
    

См. также

Результаты сортировки и группового запроса (визуальные инструменты базы данных)
сводка результатов запроса (визуальные инструменты базы данных)