Учебное пособие по агрегатным функциям MySQL: SUM, AVG, MAX, MIN, COUNT, DISTINCT

Anonim

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

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

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

1) COUNT

2) СУММА
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 дает следующие результаты.