Агрегатные функции: COUNT, SUM, AVG, MIN, MAX
Превращаем целый столбец значений в один полезный ответ
- считать строки через
COUNT(*)и значения черезCOUNT(column), - складывать столбец через
SUMи находить среднее черезAVG, - находить наименьшее и наибольшее через
MINиMAX, - объяснять, как каждая функция обходится со значениями
NULL, - агрегировать только нужные строки, добавив условие
WHERE.
1. Что такое агрегатная функция?
Представьте блендер. Вы кладёте в него целую горсть фруктов, нажимаете кнопку - и получаете один стакан сока. Агрегатная функция работает так же: вы направляете её на целый столбец значений, а она смешивает их в один ответ.
Обычный запрос SELECT price FROM toys показал бы шесть отдельных цен - шесть строк. А SELECT SUM(price) FROM toys читает все шесть цен и возвращает одно число: их сумму. Слово агрегировать просто значит "собрать многое в одно".
Пять самых частых агрегатных функций:
COUNT- сколько?SUM- какова сумма?AVG- каково среднее?MIN- какое наименьшее?MAX- какое наибольшее?
2. Наш пример: таблица магазина игрушек
Все запросы ниже работают с одной небольшой таблицей toys. Вот она: создана один раз и заполнена шестью игрушками. Обратите внимание на столбец discount: у двух игрушек скидки пока нет, поэтому их значение равно NULL (то есть "неизвестно / не задано").
CREATE TABLE toys (
id INT,
name VARCHAR(30),
price DECIMAL(5,2),
stock INT,
discount DECIMAL(4,2)
);
INSERT INTO toys VALUES
(1, 'Teddy Bear', 12.50, 8, NULL),
(2, 'Race Car', 9.00, 15, 2.00),
(3, 'Kite', 6.50, 0, NULL),
(4, 'Puzzle', 4.00, 20, 1.00),
(5, 'Doll', 15.00, 5, 3.00),
(6, 'Yo-yo', 3.00, 30, NULL);
Вся таблица выглядит так:
| id | name | price | stock | discount |
|---|---|---|---|---|
| 1 | Teddy Bear | 12.50 | 8 | NULL |
| 2 | Race Car | 9.00 | 15 | 2.00 |
| 3 | Kite | 6.50 | 0 | NULL |
| 4 | Puzzle | 4.00 | 20 | 1.00 |
| 5 | Doll | 15.00 | 5 | 3.00 |
| 6 | Yo-yo | 3.00 | 30 | NULL |
Шесть строк, а в столбце discount три настоящих числа и три NULL. Запомните это - для COUNT и AVG это важно.