Агрегатные функции в MySQL

Агрегатные функции — это все о

  • Выполнение вычислений в нескольких строках
  • Из одного столбца таблицы
  • И возвращаем одно значение.

Стандарт ISO определяет пять (5) агрегатных функций, а именно:

1) СЧЕТ
2) СУММА
3) AVG
4) МИН
5) Макс

Зачем использовать агрегатные функции

С точки зрения бизнеса, разные уровни организации предъявляют разные требования к информации. Менеджеры высшего звена обычно заинтересованы в знании целых цифр, а не в отдельных деталях.

Агрегатные функции позволяют нам легко получать обобщенные данные из нашей базы данных.

Например, из нашей базы данных myflix руководство может потребовать следующие отчеты:

  • Меньше всего берут напрокат фильмы.
  • Самые популярные фильмы, которые берут напрокат.
  • Среднее количество сданных в прокат каждого фильма в месяц.

Мы легко создаем вышеуказанные отчеты, используя агрегатные функции.

Давайте подробно рассмотрим агрегатные функции.

СЧЁТ (функция СЧЁТ)

Функция COUNT возвращает общее количество значений в указанном поле. Он работает как с числовыми, так и с нечисловыми типами данных. Все агрегатные функции по умолчанию исключают значения NULL перед работой с данными.

COUNT (*) — это специальная реализация функции COUNT, которая возвращает количество всех строк в указанной таблице. COUNT (*) также учитывает обнуляет и дубликаты.

В таблице ниже показаны данные таблицы проката фильмов.

ссылочный_ номер Дата сделки Дата возврата Количество членов Movie_id фильм_ вернулся
11 20-06-2012 NULL, 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 NULL, 3 3 0

Предположим, мы хотим узнать, сколько раз фильм с идентификатором 2 был сдан в прокат.

SELECT COUNT(`movie_id`)  FROM `movierentals` WHERE `movie_id` = 2;

Выполнение вышеуказанного запроса в MySQL верстак против myflixdb дает нам следующие результаты.

COUNT('movie_id')
3

DISTINCT ключевое слово

DISTINCT ключевое слово

Ключевое слово DISTINCT, позволяющее исключить дубликаты из результатов. Это достигается путем группировки схожих значений.

Чтобы оценить концепцию Distinct, давайте выполним простой запрос

SELECT `movie_id` FROM `movierentals`;

movie_id
1
2
2
2
3

Теперь давайте выполним тот же запрос с отдельным ключевым словом:

SELECT DISTINCT `movie_id` FROM `movierentals`;

Как показано ниже, Different исключает повторяющиеся записи из результатов.

movie_id
1
2
3

Функция MIN

Функция МИН возвращает наименьшее значение в указанном поле таблицы.

В качестве примера предположим, что мы хотим узнать год, в котором был выпущен самый старый фильм в нашей библиотеке. Мы можем использовать MySQLФункция MIN для получения желаемой информации.

Следующий запрос поможет нам добиться этого

SELECT MIN(`year_released`) FROM `movies`;

Выполнение вышеуказанного запроса в MySQL Workbench против myflixdb дает нам следующие результаты.

MIN('year_released')
2005

Макс функция

Как следует из названия, функция МАКС является противоположностью функции МИН. Это возвращает наибольшее значение из указанного поля таблицы.

Предположим, мы хотим узнать год выхода последнего фильма в нашей базе данных. Для этого мы можем легко использовать функцию MAX.

В следующем примере возвращается последний год выпуска фильма.

SELECT MAX(`year_released`)  FROM `movies`;

Выполнение вышеуказанного запроса в MySQL Workbench с использованием myflixdb дает нам следующие результаты.

MAX('year_released')
2012

СУММА функция

Предположим, нам нужен отчет, в котором указана общая сумма произведенных на данный момент платежей. Мы можем использовать MySQL SUM функция, которая возвращает сумму всех значений в указанном столбце. СУММ работает только с числовыми полями.. Нулевые значения исключаются из возвращаемого результата.

В следующей таблице показаны данные таблицы платежей.

идентификатор_платежа Количество членов дата_платежа описание сумма_ выплачена внешний_ ссылочный _номер
1 1 23-07-2012 Оплата проката фильма 2500 11
2 1 25-07-2012 Оплата проката фильма 2000 12
3 3 30-07-2012 Оплата проката фильма 6000 NULL,

Запрос, показанный ниже, получает все произведенные платежи и суммирует их, чтобы вернуть единый результат.

SELECT SUM(`amount_paid`) FROM `payments`;

Выполнение вышеуказанного запроса в MySQL Workbench против myflixdb дает следующие результаты.

SUM('amount_paid')
10500

AVG функция

MySQL AVG функция возвращает среднее значение значений в указанном столбце. Как и функция СУММ, она работает только с числовыми типами данных.

Предположим, мы хотим найти среднюю уплаченную сумму. Мы можем использовать следующий запрос –

SELECT AVG(`amount_paid`)  FROM `payments`;

Выполнение вышеуказанного запроса в MySQL Workbench, дает нам следующие результаты.

AVG('amount_paid')
3500

Логические

Вы думаете, что агрегатные функции — это просто. Попробуй это!

В следующем примере участники группируются по имени, подсчитывается общее количество платежей, средняя сумма платежей и общая сумма сумм платежей.

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 Workbench дает нам следующие результаты.

AVG функция

Резюме

  • MySQL поддерживает все пять (5) стандартных агрегатных функций ISO COUNT, SUM, AVG, МИН и МАКС.
  • СУММА и AVG функции работают только с числовыми данными.
  • Если вы хотите исключить повторяющиеся значения из результатов агрегатной функции, используйте ключевое слово DISTINCT. Ключевое слово ALL включает даже дубликаты. Если ничего не указано, значением по умолчанию считается ALL.
  • Агрегатные функции можно использовать в сочетании с другими предложениями SQL, такими как ГРУППА ПО