Предложение HAVING в агрегатных функциях SQL

Предложение HAVING в агрегатных функциях SQL

В этом руководстве мы обсудим несколько способов использования или выполнения предложения HAVING в агрегатных функциях SQL . Использование этого предложения в агрегатных функциях SQL может значительно помочь в суммировании данных.

Предложение HAVING почти похоже на оператор WHERE и может выполняться вместе с ним.

Мы обсудим их корреляции и различия, предоставив примеры по мере прохождения этого руководства.

Оглавление

Операторы GROUP BY и WHERE в SQL

В нашем первом примере мы обсудим, как выполнить предложение WHERE и GROUP BY , используя образец таблицы ниже. Обратите внимание, что мы можем использовать предложение WHERE только с существующими столбцами, а не только в агрегатных функциях.

Предложение HAVING в агрегатных функциях SQL

Допустим, мы хотим получить общий объем продаж продукта на основе его столбца SaleAmount , где значение больше 2 . Чтобы получить результат, наша команда должна быть следующей:

Предложение HAVING в агрегатных функциях SQL

Сначала мы выбираем ProductName и агрегируем SaleAmount , чтобы получить TotalSales. 

Предложение HAVING в агрегатных функциях SQL

Затем мы использовали оператор WHERE здесь, поскольку мы пытаемся получить только те продукты, для которых SaleAmount больше 2. Команда « ГРУППИРОВАТЬ ПО ProductName» указывает, что она сгруппирует строки в столбце ProductName в одну.

Выполнив наш набор команд , мы увидим, что из всех данных в столбцах ProductName и SaleAmount отображались только Bulb и Fan . Это потому, что они были единственными, у которых значение SaleAmount было больше 2.

Предложение HAVING в агрегатных функциях SQL

В этом примере оператор WHERE предназначен для фильтрации результатов с помощью существующего столбца, которым является наша сумма продажи . Также обратите внимание, что оператор WHERE появляется перед GROUP BY и не может использоваться для фильтрации агрегатных функций. С другой стороны, предложение HAVING появляется после GROUP BY и используется для фильтрации на основе агрегатной функции. 

Предложение GROUP BY и HAVING в SQL

В этом примере мы собираемся продемонстрировать разницу между оператором WHERE и предложением HAVING . Мы будем использовать ту же цель, что и в предыдущем примере, чтобы мы могли сравнить и оценить результаты. 

Давайте сначала отобразим продукты с их общим объемом продаж, используя приведенную ниже команду. Как видите, наша первая команда все еще такая же, как наша первая команда, выполняющая оператор WHERE .

Предложение HAVING в агрегатных функциях SQL

Если мы выполним наши первые две команды, мы получим следующий результат:

Предложение HAVING в агрегатных функциях SQL

Теперь предположим, что мы хотим отображать только продукты, общая сумма продаж которых превышает 5. Мы не можем использовать оператор WHERE  , поскольку его можно использовать только с существующими столбцами. Поэтому нам нужно использовать предложение HAVING , так как мы будем фильтровать из агрегатной функции. 

Предложение HAVING в агрегатных функциях SQL

Обратите внимание, как мы используем предложение HAVING после GROUP BY , в отличие от оператора WHERE , используемого перед GROUP BY. Это связано с тем, что SQL группирует записи до того, как он оценит условие HAVING

Давайте затем выполним эти команды вместе с HAVING SUM(SaleAmount)>5 . Указав, что мы хотим получить только те продукты, общая цена которых больше 5, мы заметим, что в нашей текущей таблице результатов мы больше не увидим Pen . Это потому, что его сумма меньше 5

Предложение HAVING в агрегатных функциях SQL

Короче говоря, когда мы хотим отфильтровать данные из нашей таблицы на основе существующего столбца, мы используем предложение WHERE , а когда мы хотим отфильтровать данные из агрегатной функции, мы используем предложение HAVING

Предложение HAVING And WHERE в SQL Server Management Studio (SSMS)

Теперь мы перейдем к обсуждению и демонстрации того, как мы можем выполнить предложение HAVING в SQL Server Management Studio (SSMS). Мы также рассмотрим разницу между предложением HAVING и предложением WHERE , предоставив примеры.

Ниже показан пример данных SalesOrderHeader. Эти данные состоят из 100 строк. В нашем примере мы хотим получить TotalSale по CustomerID , где TotalSale больше 10000 . Обратите внимание, что общая сумма продаж основана на сумме значений столбца TotalDue .

Предложение HAVING в агрегатных функциях SQL

Во-первых, позвольте мне продемонстрировать, почему мы не можем использовать предложение WHERE , когда хотим отфильтровать агрегатную функцию на основе нашего примера выше. 

Мы будем использовать примерный набор команд с изображения ниже. Как видите, технически у нас тот же набор команд, что и в самом первом примере.

Однако, когда мы нажимаем «Выполнить» в верхнем левом углу, это приводит к ошибке, потому что мы не можем использовать только предложение WHERE при фильтрации агрегатной функции.

Предложение HAVING в агрегатных функциях SQL

Чтобы исправить ошибку, нам нужно отфильтровать результат, используя предложение HAVING вместо предложения WHERE . Наш новый набор команд должен быть похож на изображение ниже.

Предложение HAVING в агрегатных функциях SQL

Теперь мы видим, что наша ошибка исправлена ​​и содержит результаты для каждого CustomerID с TotalSale больше 10000 .

Опять же, предложение WHERE всегда используется перед предложением GROUP BY , а предложение HAVING всегда используется после предложения GROUP BY .

Использование как предложения HAVING, так и предложения WHERE в SQL  

В этом примере предположим, что мы хотим использовать предложения WHERE и HAVING одновременно. Давайте попробуем получить TotalSale по CustomerID , где TotalSale больше 10000 , но только с клиентами, у которых их TerritoryID равен 1

Поскольку мы хотим отфильтровать результаты для клиентов, у которых TerritoryID равен 1 , мы будем использовать предложение WHERE. Итак, наша команда должна быть такой же, как и предыдущая. Опять же, мы добавили предложение WHERE перед предложением GROUP BY.

Предложение HAVING в агрегатных функциях SQL

На данный момент мы не видим большой разницы между нашим предыдущим результатом и этим новым. Однако, если вы внимательно посмотрите на нижний правый угол, у нас теперь только 64 строки по сравнению с предыдущей строкой с 505 строками данных. Это связано с тем, что результаты также фильтруются на основе их TerritoryID .

Заключение

Подводя итог, мы можем использовать предложение WHERE только с существующими столбцами. Если нам нужно фильтровать с помощью агрегированных функций, вместо этого нам нужно использовать предложение HAVING .

Использование предложения HAVING в агрегатных функциях SQL и отработка способов совместного выполнения предложений HAVING и WHERE может обеспечить пользователям удобство при работе с большим количеством данных или записей. 

Надеюсь, я предоставил вам достаточно информации и понимания того, как использовать предложение HAVING в агрегатных функциях SQL. Если вы хотите узнать больше об этой теме и другом связанном контенте, вы, безусловно, можете просмотреть список соответствующих ссылок ниже.

Всего наилучшего,

Хафиз


Что такое self в Python: примеры из реального мира

Что такое self в Python: примеры из реального мира

Что такое self в Python: примеры из реального мира

Как сохранить и загрузить файл RDS в R

Как сохранить и загрузить файл RDS в R

Вы узнаете, как сохранять и загружать объекты из файла .rds в R. В этом блоге также рассказывается, как импортировать объекты из R в LuckyTemplates.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

В этом руководстве по языку программирования DAX вы узнаете, как использовать функцию GENERATE и как динамически изменять название меры.

Продемонстрируйте идеи с помощью метода многопоточных динамических визуализаций в LuckyTemplates

Продемонстрируйте идеи с помощью метода многопоточных динамических визуализаций в LuckyTemplates

В этом учебном пособии рассказывается, как использовать технику многопоточных динамических визуализаций для создания аналитических сведений из динамических визуализаций данных в ваших отчетах.

Введение в фильтрацию контекста в LuckyTemplates

Введение в фильтрацию контекста в LuckyTemplates

В этой статье я пройдусь по контексту фильтра. Контекст фильтра — одна из основных тем, с которой должен ознакомиться любой пользователь LuckyTemplates.

Лучшие советы по использованию приложений в онлайн-службе LuckyTemplates

Лучшие советы по использованию приложений в онлайн-службе LuckyTemplates

Я хочу показать, как онлайн-служба LuckyTemplates Apps может помочь в управлении различными отчетами и аналитическими данными, созданными из различных источников.

Анализ изменений маржи прибыли с течением времени — аналитика с LuckyTemplates и DAX

Анализ изменений маржи прибыли с течением времени — аналитика с LuckyTemplates и DAX

Узнайте, как рассчитать изменения вашей прибыли, используя такие методы, как разветвление показателей и объединение формул DAX в LuckyTemplates.

Идеи материализации кэшей данных в DAX Studio

Идеи материализации кэшей данных в DAX Studio

В этом руководстве будут обсуждаться идеи материализации кэшей данных и то, как они влияют на производительность DAX при предоставлении результатов.

Бизнес-отчетность с использованием LuckyTemplates

Бизнес-отчетность с использованием LuckyTemplates

Если вы все еще используете Excel до сих пор, то сейчас самое подходящее время, чтобы начать использовать LuckyTemplates для своих бизнес-отчетов.

Что такое шлюз LuckyTemplates? Все, что тебе нужно знать

Что такое шлюз LuckyTemplates? Все, что тебе нужно знать

Что такое шлюз LuckyTemplates? Все, что тебе нужно знать