1. Список агрегатних функцій

Коли ти використовуєш групування рядків у SQL за допомогою оператора GROUP BY, то можеш використовувати в операторі SELECT функції, які працюють над згрупованими даними. Такі функції ще називають агрегатними.

Ось список найпопулярніших з них:

# Функція Опис
1 COUNT() Повертає кількість значень у групі
2 SUM() Повертає суму значень у групі
3 MAX() Повертає максимальне значення групи
4 MIN() Повертає мінімальне значення групи
5 AVG() Повертає середнє значення групи
6 BIT_AND() Виконує бітове AND над усіма значеннями групи
7 BIT_OR() Виконує бітове OR над усіма значеннями групи
8 BIT_XOR() Виконує побітове XOR над усіма значеннями групи
9 GROUP_CONCAT() Склеює всі значення групи в один рядок
Це не повний список агрегатних функцій, але інші дуже специфічні і я не думаю, що ти будеш ними користуватися в найближчі років 5. Якщо ж вони все ж таки тобі знадобляться, ти завжди можеш почитати офіційну документацію по твоїй СУБД.

А тепер давай розглянемо кілька прикладів із нашими агрегатними функціями.

2. Аналізуємо зарплати працівників

Давай обчислимо деяку статистику щодо наших співробітників з таблиці employee.

Питання перше: скільки у нас співробітників?

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


SELECT COUNT(*) FROM employee
        

І як відповідь MySQL поверне число 6. У нас 6 співробітників у відділі, разом з котом. Все правильно.

Запитання друге: скільки ми платимо на місяць усім співробітникам?

Щоб відповісти на це запитання, нам потрібно підсумувати зарплати всіх співробітників. Для цього скористаємося агрегатною функцією SUM()

Запит виглядатиме так:


SELECT SUM(salary) FROM employee
        

Зверни увагу, що цього разу ми повинні зазначити, значення якої колонки ми підсумовуємо. Ми вказали стовпчик salary. Ми не можемо просто підсумувати всі поля таблиці.

Як відповідь MySQL поверне число 461 000. У нас 6 співробітників у відділі, а зарплата — 461 тисяча. Забагато.

І нарешті, третє питання: яка у нас максимальна та мінімальна зарплати у відділі? Ну і ще давай середню зарплату порахуємо. Для цього нам знадобляться функції MIN, MAX та AVG.

Запит буде трохи складніше, цього разу виглядатиме так:


SELECT MIN(salary), AVG(salary), MAX(salary)
FROM employee
        

Результат цього запиту буде таким:

MIN(salary) AVG(salary) MAX(salary)
1000 76833.3333 200000

Мінімальна зарплата у нашому відділі 1000 доларів — дуже добре. Максимальна зарплата — 200 тисяч, але це директор.

А ось середня зарплата надто висока, треба якось оптимізувати витрати. Наймемо ще одного кота — і готово:)