Работа со столбцами в итоговых запросах
Обновлен: Ноябрь 2007
Средства конструктора запросов и представлений делает некоторые предположения для создания правильного запроса. Например, если при создании итогового запроса помечается столбец данных для вывода, конструктор запросов и представлений автоматически включает этот столбец в предложение GROUP BY, чтобы в итоговых результатах случайно не было отображено содержимое отдельной строки.
Использование параметра "Группировать по"
При работе со столбцами в конструкторе запросов и представлений применяются следующие правила:
При выборе параметра "Группировать по" или добавлении статистической функции в запрос все столбцы, помеченные для вывода или используемые для сортировки, автоматически добавляются в предложение GROUP BY. Столбцы не добавляются автоматически в предложение GROUP BY, если они уже являются частью статистической функции.
Если нужно, чтобы определенный столбец не входил в предложение GROUP BY, необходимо вручную изменить его, выбрав другой параметр в столбце "Группировать по" в области критериев. Тем не менее, конструктор запросов и представлений позволяет выбрать параметр, который сделает невозможным выполнение запроса.
Если выходной столбец запроса добавлен в статистическую функцию вручную в области критериев или SQL, конструктор запросов и представлений не удалит автоматически другие выходные столбцы из запроса. Поэтому нужно удалить оставшиеся столбцы из выходных столбцов запроса либо включить их в предложение GROUP BY или статистическую функцию.
При вводе условия поиска в столбец "Фильтр" области критериев в конструкторе запросов и представлений применяются следующие правила:
Если столбец Группировать сетки не отображен (так как итоговый запрос еще не указан), условие поиска помещается в предложение WHERE.
Если итоговый запрос уже задан и выбран параметр Где столбца Группировать, условие поиска помещается в предложение WHERE.
Если столбец Группировать содержит любые значения, отличные от Где, условие поиска помещается в предложение HAVING.
Использование предложений HAVING и WHERE
Приведенные ниже принципы лежат в основе использования столбцов в условиях поиска в итоговом запросе. Обычно можно использовать столбец в условии поиска для фильтрации строк, по которым должны быть подведены итоги (предложение WHERE), или чтобы определить, какие сгруппированные результаты появятся в конечных выходных данных (предложение HAVING).
Отдельные столбцы данных могут появляться как в предложениях WHERE, так и в предложениях HAVING, в зависимости от того как они используются в других частях запроса.
Предложения WHERE используются для выбора поднабора строк для подведения итогов или группирования и, следовательно, применяются перед любым группированием. Поэтому можно использовать столбец данных в предложении WHERE, даже если он не указан в предложении GROUP BY или не содержится в статистической функции. Например, следующая инструкция выбирает все наименования, стоимость которых больше чем 10,00 долларов США, и вычисляет среднюю цену:
SELECT AVG(price) FROM titles WHERE price > 10
Если создается условие поиска со столбцом, используемым также в предложении GROUP BY или в статистической функции, это условие может быть указано в предложении WHERE или HAVING. Предложение выбирает пользователь, когда создает условие. Например, следующая инструкция создает среднюю цену для наименований для каждого издателя и потом отображает среднее по издателям, у которых средняя цена больше 10,00 долларов США:
SELECT pub_id, AVG(price) FROM titles GROUP BY pub_id HAVING (AVG(price) > 10)
Если в условии поиска используется статистическая функция, это условие затрагивает сводку и поэтому должно быть указано в предложении HAVING.