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


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

применимо к:SQL Server

При создании статистических запросов инструменты конструктора запросов и представлений (визуальные инструменты базы данных) делают определенные предположения, чтобы он смог создать допустимый запрос. Например, если вы создаете итоговый запрос и выбираете столбец данных для вывода, конструктор запросов автоматически включает столбец в оператор GROUP BY, чтобы случайно не попытаться отобразить содержимое отдельной строки сводным образом.

Использование группы по

Конструктор запросов и представлений использует следующие рекомендации по работе со столбцами:

  • При выборе параметра Group By или добавлении статистической функции в запрос все столбцы, помеченные для выходных данных или используемых для сортировки, автоматически добавляются в GROUP BY предложение. Столбцы не добавляются в предложение GROUP BY автоматически, если они уже являются частью агрегатной функции.

    Если вы не хотите, чтобы конкретный столбец был частью GROUP BY условия, его необходимо изменить вручную, выбрав другой параметр в столбце "Группировка по" панели критериев. Однако конструктор запросов и представлений не препятствует выбору параметра, который может привести к созданию запроса, который не выполняется.

  • Если вы вручную добавите выходной столбец запроса в агрегатную функцию в области "Критерии" или "SQL", конструктор запросов и представлений автоматически не удаляет другие выходные столбцы из запроса. Поэтому необходимо удалить оставшиеся столбцы из выходных данных запроса или сделать их частью GROUP BY предложения или агрегатной функции.

При вводе условия поиска в столбец "Фильтр" области условий конструктор запросов и представлений следует следующим правилам:

  • Если столбец Group By сетки не отображается (так как вы еще не указали агрегатный запрос), условие поиска помещается в WHERE предложение.

  • Если вы уже находитесь в статистическом запросе и выбрали параметр Where в столбце Group By , условие поиска помещается в WHERE предложение.

  • Если столбец Group By содержит любое значение, отличное от 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 предложения.