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() | Склеює всі значення групи в один рядок |
А тепер давай розглянемо кілька прикладів із нашими агрегатними функціями.
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 тисяч, але це – директор.
А от середня зарплата надто висока, треба якось оптимізувати витрати. Наймемо ще одного кота і справу з кінцем :)
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ