6.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 років. Якщо ж вони все ж таки вам знадобляться, ви завжди можете почитати офіційну документацію по вашій СУБД.

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

6.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 тисяч, але це – директор.

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