Суммирование при помощи функций SUM() и AVG()

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

Решение
Используйте функцию SUM() или AVG().

Обсуждение
Функции SUM() и AVG() выводят сумму и среднее значение для набора данных. Используйте их, чтобы получить ответы на вопросы:

• Каковы общий объем почтового трафика и средний размер сообщения?

mysql> SELECT SUM(size) AS 'total traffic',
-> AVG(size) AS 'average message size'
-> FROM mail;

+-------------+---------------------------+
| total traffic | average message size |
+-------------+---------------------------+
| 3798185 | 237386.5625 |
+-------------+---------------------------+

• Сколько всего миль проехали водители из таблицы driver_log? Каким был средний дневной пробег?

mysql> SELECT SUM(miles) AS 'total miles',
-> AVG(miles) AS 'average miles/day'
-> FROM driver_log;

+------------+----------------------+
| total miles | average miles/day |
+------------+----------------------+
| 2166 | 216.6000 |
+------------+----------------------+

• Каково общее население США?

mysql> SELECT SUM(pop) FROM states;

+-------------+
| SUM(pop) |
+-------------+
| 248102973 |
+-------------+

(Значение представляет население США на 1 апреля 1990 года.


Приведенные цифры отличаются от показателей переписи населения, так как таблица states не содержит данных о Вашингтоне, округ Колумбия.) Функции SUM() и AVG() являются строго числовыми, то есть не могут применяться к строкам или значениям времени. Правда, в некоторых случаях можно преобразовать нечисловые значения в числовые. Предположим, что
таблица хранит значения TIME, представляющие затраченное время:

mysql> SELECT t1 FROM time_val;

+-----------+
| t1 |
+-----------+
| 15:00:00 |
| 05:01:30 |
| 12:30:20 |
+-----------+

Чтобы вычислить общее потраченное время, сначала используем функцию TIME_TO_SEC() для преобразования значений в секунды. Результат также будет выражен в секундах, так что если вы предпочитаете формат TIME, передайте результат в SEC_TO_TIME():

mysql> SELECT SUM(TIME_TO_SEC(t1)) AS 'total seconds',
-> SEC_TO_TIME(SUM(TIME_TO_SEC(t1))) AS 'total time'
-> FROM time_val;

+----------------+------------+
| total seconds | total time |
+----------------+------------+
| 117110 | 32:31:50 |
+----------------+------------+

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела MySQL на эту тему:
Выбор групп только с определенными характеристиками
Группирование по результатам выражения
Использование ключевого слова DISTINCT для удаления дубликатов
Итоги и значения NULL
Итоги по датам

Вернуться в раздел: MySQL / 7. Формирование итогов