Агрегатні функції в MySQL

Агрегатні функції – це все

  • Виконання обчислень у кількох рядках
  • З одного стовпця таблиці
  • І повертає одне значення.

Стандарт ISO визначає п’ять (5) агрегатних функцій, а саме;

1) ПОРАХУВАТИ
2) СУМА
3) AVG
4) МІН
5) МАКС

Навіщо використовувати агрегатні функції

З точки зору бізнесу, різні рівні організації мають різні вимоги до інформації. Керівники вищого рівня зазвичай зацікавлені в тому, щоб знати цілі цифри, а не окремі деталі.

Агреговані функції дозволяють нам легко створювати зведені дані з нашої бази даних.

Наприклад, з нашої бази даних myflix керівництво може вимагати наступні звіти

  • Найменше взяті напрокат фільми.
  • Більшість прокатних фільмів.
  • Середня кількість прокату кожного фільму за місяць.

Ми легко створюємо вищезазначені звіти за допомогою агрегатних функцій.

Розглянемо агрегатні функції докладніше.

функція COUNT

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

COUNT (*) — це спеціальна реалізація функції COUNT, яка повертає кількість усіх рядків у вказаній таблиці. COUNT (*) також враховує Нулі і дублікати.

У таблиці нижче показано дані в таблиці прокату фільмів

номер для посилань дата транзакції дата_повернення членський_ номер movie_id movie_ повернувся
11 20-06-2012 NULL 1 1 0
12 22-06-2012 25-06-2012 1 2 0
13 22-06-2012 25-06-2012 3 2 0
14 21-06-2012 24-06-2012 2 2 0
15 23-06-2012 NULL 3 3 0

Припустімо, що ми хочемо отримати кількість разів, коли фільм з ідентифікатором 2 був зданий напрокат

SELECT COUNT(`movie_id`)  FROM `movierentals` WHERE `movie_id` = 2;

Виконання наведеного вище запиту в MySQL верстак проти myflixdb дає нам такі результати.

COUNT('movie_id')
3

DISTINCT ключове слово

DISTINCT ключове слово

Ключове слово DISTINCT, яке дозволяє нам пропускати дублікати з наших результатів. Це досягається групуванням подібних значень.

Щоб зрозуміти концепцію Distinct, давайте виконаємо простий запит

SELECT `movie_id` FROM `movierentals`;

movie_id
1
2
2
2
3

Тепер давайте виконаємо той самий запит з окремим ключовим словом-

SELECT DISTINCT `movie_id` FROM `movierentals`;

Як показано нижче, distinct пропускає повторювані записи з результатів.

movie_id
1
2
3

Функція MIN

Функція MIN повертає найменше значення у вказаному полі таблиці.

Як приклад, припустімо, що ми хочемо знати рік, у якому вийшов найстаріший фільм у нашій бібліотеці, ми можемо використати MySQLФункція MIN для отримання потрібної інформації.

Наступний запит допомагає нам досягти цього

SELECT MIN(`year_released`) FROM `movies`;

Виконання наведеного вище запиту в MySQL workbench проти myflixdb дає нам такі результати.

MIN('year_released')
2005

Функція MAX

Як випливає з назви, функція MAX є протилежністю функції MIN. Це повертає найбільше значення з указаного поля таблиці.

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

Наступний приклад повертає останній рік випуску фільму.

SELECT MAX(`year_released`)  FROM `movies`;

Виконання наведеного вище запиту в MySQL Workbench з використанням myflixdb дає нам такі результати.

MAX('year_released')
2012

Функція SUM

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

У наступній таблиці показано дані в таблиці платежів-

ідентифікатор платежу членський_ номер дата оплати description виплачувана сума зовнішній_посилальний_номер
1 1 23-07-2012 Оплата прокату фільму 2500 11
2 1 25-07-2012 Оплата прокату фільму 2000 12
3 3 30-07-2012 Оплата прокату фільму 6000 NULL

Наведений нижче запит отримує всі здійснені платежі та підсумовує їх, щоб отримати єдиний результат.

SELECT SUM(`amount_paid`) FROM `payments`;

Виконання наведеного вище запиту в MySQL workbench проти myflixdb дає такі результати.

SUM('amount_paid')
10500

AVG функція

MySQL AVG функція повертає середнє значення у вказаному стовпці. Так само, як і функція SUM, це працює лише з числовими типами даних.

Припустимо, ми хочемо знайти середню виплачену суму. Ми можемо використати такий запит –

SELECT AVG(`amount_paid`)  FROM `payments`;

Виконання наведеного вище запиту в MySQL workbench, дає нам такі результати.

AVG('amount_paid')
3500

Мозок тизер

Ви думаєте, що агрегатні функції легкі. Спробуйте це!

У наступному прикладі учасники групуються за іменами, підраховується загальна кількість платежів, середня сума платежу та загальна сума платежів.

SELECT m.`full_names`,COUNT(p.`payment_id`) AS  `paymentscount`,AVG(p.`amount_paid`)  AS `averagepaymentamount`,SUM(p.`amount_paid`)  AS `totalpayments` FROM members m, payments p WHERE m.`membership_number` = p.`membership_number` GROUP BY m.`full_names`;

Виконання наведеного вище прикладу в MySQL Workbench дає нам такі результати.

AVG функція

Підсумки

  • MySQL підтримує всі п’ять (5) стандартних агрегатних функцій ISO COUNT, SUM, AVG, MIN і MAX.
  • СУМ і AVG функції працюють лише з числовими даними.
  • Якщо ви хочете виключити повторювані значення з результатів агрегатної функції, використовуйте ключове слово DISTINCT. Ключове слово ALL містить навіть дублікати. Якщо нічого не вказано, ALL вважається типовим.
  • Агрегатні функції можна використовувати в поєднанні з іншими пропозиціями SQL, такими як GROUP BY