У меня в базе данных пока нет хорошей колонки, по которой можно было бы потренироваться на этих функциях, потому что это круто делать на колонках с числами.
Функции, которые мы будем рассматривать предназначены для подсчетов – количества, суммы, среднего числа, минимального, максимального.
Начнем с простого – количества записей. Подсчет по-английски это count(*):
select count(*) from phone;
Результатом будет количество строк в таблице phone:
+----------+ | count(*) | +----------+ | 12 | +----------+
В скобках чаще всего можно увидеть звездочку, хотя в реальности там можно указать что угодно, даже цифру 1:
select count(1) from phone;
+----------+ | count(1) | +----------+ | 12 | +----------+
Count считает, сколько строк будет выведено в результате со значением, так что ему все равно, что считать – звездочку или какое-то поле. Но тут есть одно НО – поле должно иметь значение. Что если мы посчитаем фамилию:
select count(lastname) from phone;
Результатом будет уже не 12, а только 10, потому что только у 10 строк в моей таблице имена имеют значение и у двух строк он равен null:
+-----------------+ | count(lastname) | +-----------------+ | 10 | +-----------------+
То есть сервер не будет считать записи, в которых указанная колонка содержит NULL. Таким образом следующие два запроса идентичны:
select count(lastname) from phone; select count(lastname) from phone where lastname IS NOT null;
Единственный вариант, который еще может пригодиться вам – можно подсчитать количество уникальных записей и вот тогда можно передать в скобках слово DISTINCT и имя поля, по которому будем считать уникальность:
select count(distinct firstname) from phone;
+---------------------------+ | count(distinct firstname) | +---------------------------+ | 10 | +---------------------------+
Этот запрос говорит, что у нас 10 уникальных имен.
Если добавить WHERE фильтр, то можно считать что-то более интересное. Например, можно посчитать, сколько телефонных записей в нашей таблице с городом Торонто (это город с cityid = 1):
select count(*) from phone where cityid = 1;
Помимо count можно найти:
SUM – сумму чисел в какой-то колонке:
MIN – минимальное значение
MAX – максимальное значение
AVG – среднее
Следующий запрос показывает все эти функции в одном запросе:
SELECT count(*) as cnt, min(phoneid) as minphoneid, max(phoneid) as maxphoneid, avg(phoneid) as avgphoneid, sum(phoneid) as sumofponeid FROM phone;
Чтобы было удобнее я каждой колонке дал еще и псевдоним:
+-----+------------+------------+------------+-------------+ | cnt | minphoneid | maxphoneid | avgphoneid | sumofponeid | +-----+------------+------------+------------+-------------+ | 12 | 1 | 13 | 6.6667 | 80 | +-----+------------+------------+------------+-------------+