Агрегатні функції є важливими інструментами SQL, які дозволяють виконувати обчислення над кількома рядками даних, повертаючи єдине узагальнене значення. Вони відіграють важливу роль в аналізі даних, звітності та формуванні висновків з ваших баз даних. Нижче наведено детальний розбір агрегатних функцій, їхні варіанти використання, синтаксис, приклади та найкращі практики їх використання в SQL.
Що таке агрегатні функції?
Агрегатні функції виконують обчислення над набором рядків і повертають єдине значення, що допомагає узагальнити великі набори даних. Вони часто використовуються в звітах, на панелях управління та в аналізі даних для отримання значущих висновків.
Загальні агрегатні функції в SQL
SUM
- Обчислює суму числового стовпця.
- Приклад використання: Загальний дохід від продажів, загальні витрати тощо.
AVG
- Обчислює середнє значення числового стовпця.
- Приклад використання: Середня заробітна плата, середня ціна продукту тощо.
COUNT
- Підраховує кількість рядків або ненульових значень у стовпці.
- Приклад використання: Загальна кількість транзакцій, загальна кількість працівників тощо.
MIN
- Повертає найменше значення в стовпці.
- Приклад використання: Найнижча ціна, мінімальна заробітна плата тощо.
MAX
- Повертає найбільше значення в стовпці.
- Приклад використання: Найвищий бал, максимальний прибуток тощо.
Ці функції часто комбінуються з такими клаузами, як GROUP BY
та HAVING
для фільтрації або організації результатів.
Приклад набору даних
Для демонстрації скористаємося уявною таблицею sales
.
Практичні приклади агрегатних функцій
1. Обчислення загальних продажів (SUM)
Щоб обчислити загальний дохід від продажів:
SELECT SUM(quantity * price) AS total_sales
FROM sales;
Пояснення:
ФункціяSUM
обчислює загальний дохід, множачиquantity
іprice
для кожного рядка та підсумовуючи їх.
2. Знаходження середньої ціни (AVG)
Щоб знайти середню ціну продуктів:
SELECT AVG(price) AS average_price
FROM sales;
Пояснення:
ФункціяAVG
обчислює середнє значення стовпцяprice
для всіх рядків.
3. Підрахунок транзакцій (COUNT)
Щоб підрахувати загальну кількість транзакцій:
SELECT COUNT(*) AS total_transactions
FROM sales;
Пояснення:
ФункціяCOUNT(*)
підраховує всі рядки в таблиці.
4. Знаходження максимальних і мінімальних цін (MAX, MIN)
Щоб знайти найвищі та найнижчі ціни в таблиці:
SELECT MAX(price) AS max_price, MIN(price) AS min_price
FROM sales;
Пояснення:
MAX
визначає найбільше значення в стовпціprice
, аMIN
— найменше.
Комбінування агрегатних функцій з GROUP BY
Агрегатні функції стають ще потужнішими, коли їх поєднують з клаузою GROUP BY
. Це дозволяє групувати рядки за конкретними стовпцями та обчислювати агрегатні значення для кожної групи.
Приклад: Загальна кількість проданих одиниць на кожен продукт
Щоб обчислити загальну кількість проданих одиниць для кожного продукту:
SELECT product, SUM(quantity) AS total_quantity
FROM sales
GROUP BY product;
Пояснення:
КлаузулаGROUP BY
групує рядки за стовпцемproduct
, аSUM(quantity)
обчислює загальну кількість проданих одиниць для кожної групи.
Фільтрація агрегованих даних за допомогою HAVING
Клаузула HAVING
фільтрує агреговані дані після групування.
Це схоже на клаузу WHERE, але вона працює з агрегованими даними.
Приклад: Продукти з загальною кількістю > 3
Щоб знайти продукти, де загальна кількість проданих одиниць перевищує 3:
SELECT product, SUM(quantity) AS total_quantity
FROM sales
GROUP BY product
HAVING SUM(quantity) > 3;
Пояснення:
КлаузулаHAVING
фільтрує групи, деSUM(quantity)
дорівнює 3 або менше.
Найкращі практики використання агрегатних функцій
Комбінуйте з GROUP BY:
Завжди використовуйтеGROUP BY
, коли застосовуєте агрегатні функції до групованих даних.
Приклад: Обчислити загальний дохід для кожного регіону.
Фільтруйте на ранніх етапах:
Використовуйте клаузуWHERE
для фільтрації рядків перед агрегуванням.
Приклад: Фільтруйте рядки з price = 0
перед обчисленням загального доходу.
Оптимізуйте запити:
Уникайте надмірного використання агрегатних функцій у великих наборах даних без індексації чи попереднього фільтрування для збереження продуктивності.
Загальні помилки, яких слід уникати
1. Використання агрегатних функцій без GROUP BY Приклад (Неправильно)
SELECT product, SUM(quantity)
FROM sales;
Це викличе помилку, оскільки product
не згруповано.
2. Плутанина між WHERE та HAVING
- Використовуйте
WHERE
, щоб фільтрувати рядки до групування. - Використовуйте
HAVING
, щоб фільтрувати агреговані результати після групування.
Варіанти використання агрегатних функцій
Звіти та панелі моніторингу:
Загальний дохід, середні витрати клієнтів, рейтинги продуктів.Аналіз даних:
Визначення високопродуктивних продуктів, обчислення коефіцієнтів відтоку.Бізнес-інтелект:
Обчислення KPI, аналіз трендів.
Підсумок
Агрегатні функції, такі як SUM
, AVG
, COUNT
, MIN
та MAX
, є потужними інструментами для аналізу даних і складання звітів. Коли вони комбінуються з GROUP BY
та HAVING
, це дозволяє отримувати цінні висновки з ваших даних.
Перекладено з: Aggregate Functions in SQL