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