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