Агрегатные функции - это все о
- Выполнение вычислений для нескольких строк
- Из одного столбца таблицы
- И возвращая единственное значение.
Стандарт ISO определяет пять (5) агрегатных функций, а именно:
1) COUNT
3) СРЕДН.
4) МИН.
5) МАКС.
Зачем использовать агрегатные функции.
С точки зрения бизнеса, разные уровни организации имеют разные требования к информации. Менеджеры высшего уровня обычно заинтересованы в знании целых цифр, а не в отдельных деталях.
> Агрегатные функции позволяют нам легко создавать сводные данные из нашей базы данных.
Например, из нашей базы данных myflix менеджменту могут потребоваться следующие отчеты
- Наименее арендованные фильмы.
- Самые популярные фильмы.
- Среднее количество, которое каждый фильм сдается в месяц.
Мы легко составляем вышеуказанные отчеты с помощью агрегатных функций.
Давайте подробнее рассмотрим агрегатные функции.
Функция COUNT
Функция COUNT возвращает общее количество значений в указанном поле. Он работает как с числовыми, так и с нечисловыми типами данных. Все агрегатные функции по умолчанию исключают значения NULL перед работой с данными.
COUNT (*) - это специальная реализация функции COUNT, которая возвращает количество всех строк в указанной таблице. COUNT (*) также считает пустые значения и дубликаты.
В приведенной ниже таблице показаны данные в таблице фильмов.
номер_ ссылки | Дата сделки | Дата возвращения | членский номер | movie_id | movie_ вернулся |
---|---|---|---|---|---|
11 | 20.06.2012 | НОЛЬ | 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 | НОЛЬ | 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`;
Как показано ниже, при использовании метода отличные повторяющиеся записи не отображаются в результатах.
movie_id |
---|
1 |
2 |
3 |
Функция МИН
Функция MIN возвращает наименьшее значение в указанном поле таблицы .
В качестве примера предположим, что мы хотим узнать год, в котором был выпущен самый старый фильм в нашей библиотеке, мы можем использовать функцию MySQL MIN, чтобы получить желаемую информацию.
Следующий запрос помогает нам добиться этого.
SELECT MIN(`year_released`) FROM `movies`;
Выполнение вышеуказанного запроса в рабочей среде MySQL для myflixdb дает нам следующие результаты.
MIN('year_released') |
---|
2005 |
Функция МАКС
Как следует из названия, функция MAX противоположна функции MIN. Он возвращает наибольшее значение из указанного поля таблицы .
Предположим, мы хотим получить год, когда был выпущен последний фильм в нашей базе данных. Для этого мы можем легко использовать функцию MAX.
В следующем примере возвращается последний год выпуска фильма.
SELECT MAX(`year_released`) FROM `movies`;
Выполнение вышеуказанного запроса в рабочей среде MySQL с использованием myflixdb дает нам следующие результаты.
MAX('year_released') |
---|
2012 |
СУММ ( функция СУММ)
Предположим, нам нужен отчет, в котором указана общая сумма произведенных на данный момент платежей. Мы можем использовать функцию MySQL SUM, которая возвращает сумму всех значений в указанном столбце . СУММ работает только с числовыми полями . Нулевые значения исключаются из возвращаемого результата.
В следующей таблице показаны данные в таблице платежей.
payment_ id | членский номер | платеж_дата | описание | сумма_ оплачена | внешняя_ ссылка _ номер |
---|---|---|---|---|---|
1 | 1 | 23-07-2012 | Оплата проката фильма | 2500 | 11 |
2 | 1 | 25.07.2012 | Оплата проката фильма | 2000 г. | 12 |
3 | 3 | 30-07-2012 | Оплата проката фильма | 6000 | НОЛЬ |
Приведенный ниже запрос получает все произведенные платежи и суммирует их, чтобы получить единый результат.
SELECT SUM(`amount_paid`) FROM `payments`;
Выполнение вышеуказанного запроса в рабочей среде MySQL для myflixdb дает следующие результаты.
SUM('amount_paid') |
---|
10500 |
Функция AVG
Функция MySQL AVG возвращает среднее значение в указанном столбце . Как и функция СУММ, она работает только с числовыми типами данных .
Предположим, мы хотим найти среднюю уплаченную сумму. Мы можем использовать следующий запрос -
SELECT AVG(`amount_paid`) FROM `payments`;
Выполнение вышеуказанного запроса в рабочей среде MySQL дает следующие результаты.
AVG('amount_paid') |
---|
3500 |
Резюме
- MySQL поддерживает все пять (5) стандартных агрегатных функций ISO: COUNT, SUM, AVG, MIN и MAX.
- Функции СУММ и СРЕДНЕЕ работают только с числовыми данными.
- Если вы хотите исключить повторяющиеся значения из результатов агрегатной функции, используйте ключевое слово DISTINCT. Ключевое слово ALL включает даже дубликаты. Если ничего не указано, по умолчанию принимается ВСЕ.
- Агрегатные функции могут использоваться вместе с другими предложениями SQL, такими как GROUP BY.
Логические
Вы думаете, что агрегатные функции - это просто. Попробуй это!
В следующем примере участники группируются по именам, подсчитываются общее количество платежей, средняя сумма платежа и общая сумма сумм платежей.
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 дает следующие результаты.