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


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

применимо к: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.

См. также

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