Речення HAVING в агрегатних функціях SQL

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

Речення HAVING майже схоже на оператор WHERE і також може виконуватися разом з ним.

Ми обговоримо їхні кореляції та відмінності, надавши приклади під час проходження цього підручника.

Зміст

Інструкції GROUP BY і WHERE у SQL

Для нашого першого прикладу ми обговоримо, як виконати та використати приклад таблиці нижче. Зауважте, що ми можемо використовувати речення WHERE лише з наявними стовпцями, а не лише в агрегатних функціях.

Речення HAVING в агрегатних функціях SQL

Припустімо, ми хочемо отримати загальний обсяг продажів продукту на основі його стовпця SaleAmount , де значення більше 2 . Щоб отримати результат, наша команда повинна бути наступною:

Речення HAVING в агрегатних функціях SQL

Спочатку ми вибираємо ProductName і об’єднуємо SaleAmount , щоб отримати TotalSales. 

Речення HAVING в агрегатних функціях SQL

Потім ми використали тут оператор WHERE , оскільки ми намагаємося отримати лише ті продукти, у яких SaleAmount перевищує 2. Команда «GROUP BY ProductName» вказує, що вона згрупує рядки під стовпцем ProductName в один.

Виконавши наш набір команд , ми побачимо, що з усіх даних у стовпцях ProductName і SaleAmount відображаються лише Bulb і Fan . Це тому, що вони були єдиними, хто мав SaleAmount , більший за 2.

Речення HAVING в агрегатних функціях SQL

У цьому прикладі оператор WHERE призначений для фільтрації результатів за наявним стовпцем, який є нашою SaleAmount . Також зауважте, що оператор 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 і WHERE у SQL Server Management Studio (SSMS)

Тепер ми будемо рухатися вперед, обговорюючи та демонструючи, як ми можемо виконати пропозицію HAVING у (SSMS). Ми також розглянемо різницю між пропозиціями HAVING і WHERE , надавши приклади.

Нижче показано наш зразок даних SalesOrderHeader. Ці дані складаються зі 100 рядків. Для нашого прикладу ми хочемо отримати TotalSale за CustomerID , де TotalSale більше 10000 . Зауважте, що загальна сума продажу базується на сумі значень стовпця TotalDue .

Речення HAVING в агрегатних функціях SQL

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

Ми будемо використовувати зразок набору команд із зображення нижче. Як ви бачите, технічно ми маємо той самий набір команд, що й у нашому першому прикладі.

Однак, коли ми натискаємо «Виконати» у верхньому лівому куті, це призведе до помилки, оскільки ми не можемо використовувати лише речення WHERE під час фільтрації за агрегатною функцією.

Речення HAVING в агрегатних функціях SQL

Щоб виправити помилку, нам потрібно відфільтрувати результат за допомогою пропозиції HAVING замість пропозиції WHERE . Наш новий набір команд має бути схожим на зображення нижче.

Речення HAVING в агрегатних функціях SQL

Тепер ми бачимо, що нашу помилку виправлено та містить результати заіз TotalSale понад 10000 .

Знову ж таки, речення WHERE завжди використовується перед реченням GROUP BY , тоді як речення HAVING завжди використовується після речення GROUP BY .

Використання обох речень HAVING і WHERE у SQL  

Для цього прикладу, скажімо, ми хочемо використовувати пропозиції WHERE і HAVING одночасно. Давайте спробуємо отримати TotalSale за CustomerID , де TotalSale перевищує 10000 , але лише для клієнтів, у яких їхній TerritoryID дорівнює 1

Оскільки ми хочемо відфільтрувати результати за клієнтами, які мають 1 як TerritoryID , ми використаємо речення WHERE. Отже, наша команда має бути такою ж, як і наша попередня. Знову ж таки, ми додали речення WHERE перед реченням GROUP BY.

Речення HAVING в агрегатних функціях SQL

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

Висновок

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

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

Сподіваюся, я надав вам достатньо інформації та розуміння того, як використовувати речення HAVING у агрегатних функціях SQL. Якщо ви хочете дізнатися більше про цю тему та інший пов’язаний вміст, ви, звичайно, можете переглянути список відповідних посилань нижче.

Все найкраще,

Хафіз


Змініть формати дати за допомогою редактора Power Query

Змініть формати дати за допомогою редактора Power Query

У цьому посібнику ви дізнаєтеся, як перетворити текст у формат дати за допомогою редактора Power Query в LuckyTemplates.

Power Query: об’єднайте файли з кількох папок

Power Query: об’єднайте файли з кількох папок

Дізнайтеся, як об’єднати файли з кількох папок у мережі, робочому столі, OneDrive або SharePoint за допомогою Power Query.

Обчисліть місячне ковзне середнє з початку року (з початку року) у LuckyTemplates

Обчисліть місячне ковзне середнє з початку року (з початку року) у LuckyTemplates

Цей підручник пояснює, як обчислити місячне ковзне середнє на базі даних з початку року за допомогою функцій AVERAGEX, TOTALYTD та FILTER у LuckyTemplates.

Створення таблиці дат у LuckyTemplates

Створення таблиці дат у LuckyTemplates

Дізнайтеся, чому важлива спеціальна таблиця дат у LuckyTemplates, і вивчіть найшвидший і найефективніший спосіб це зробити.

Мобільні звіти LuckyTemplates. Поради та методи

Мобільні звіти LuckyTemplates. Поради та методи

У цьому короткому посібнику розповідається про функцію мобільних звітів LuckyTemplates. Я збираюся показати вам, як ви можете ефективно створювати звіти для мобільних пристроїв.

Звіти про професійну аналітику послуг у LuckyTemplates

Звіти про професійну аналітику послуг у LuckyTemplates

У цій презентації LuckyTemplates ми розглянемо звіти, що демонструють професійну аналітику послуг від фірми, яка має кілька контрактів і залучених клієнтів.

Оновлення Microsoft Power Platform | Microsoft Ignite 2021

Оновлення Microsoft Power Platform | Microsoft Ignite 2021

Ознайомтеся з основними оновленнями для Power Apps і Power Automate, а також їх перевагами та наслідками для Microsoft Power Platform.

Загальні функції SQL: огляд

Загальні функції SQL: огляд

Відкрийте для себе деякі поширені функції SQL, які ми можемо використовувати, наприклад String, Date і деякі розширені функції для обробки та маніпулювання даними.

Створення шаблону LuckyTemplates: керівництво та поради

Створення шаблону LuckyTemplates: керівництво та поради

У цьому підручнику ви дізнаєтеся, як створити свій ідеальний шаблон LuckyTemplates, налаштований відповідно до ваших потреб і вподобань.

Параметри полів і малі кратні в LuckyTemplates

Параметри полів і малі кратні в LuckyTemplates

У цьому блозі ми продемонструємо, як шарувати параметри поля з малими кратними, щоб створити неймовірно корисну інформацію та візуальні ефекти.