Задача
Вам нужно найти сумму чисел или вычислить их среднее значение.
Решение
Используйте функцию 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 |
+----------------+------------+