Операторы MySQL min, max, sum, avg, count применяются не так часто, они дополняют базовые SELECT, UPDATE и т.п. и могут значительно упростить процесс получения нужных данных из базы. Кратко рассмотрим операторы.
MySQL min, max, sum, avg, count
Все перечисленные функции относятся к Aggregation, т.е. являются функциями выполняемыми по отношению к значениям, содержащимся в нескольких строках.
Продолжим работу с базой REAL_ESTATE, которая создана и наполнена при подготовке статей цикла по основам работы с MySQL (статья цикла про SELECT)
select * from REAL_ESTATE;
+————+——————+————+—————-+———————+————+———+
| type | city | floorspace | district | street | rentorsale | PRICE |
+————+——————+————+—————-+———————+————+———+
| Appartment | Yekaterinburg | 44 | Akademicheskiy | Shaumana | Rent | 15000 |
| Appartment | Moscow | 56 | Center | Tverskaya | Rent | 50000 |
| House | Tver | 130 | Leninskiy | Zelenaya | Sale | 250000 |
…
avg выведет среднее значение среди всех в определенной колонке таблицы.
select avg(PRICE) from REAL_ESTATE;
+———————+
| avg(PRICE) |
+———————+
| 37307.692307692305 |
+———————+
1 row in set (0.00 sec)
Таким же образом будет выглядеть MySQL min
select min(PRICE) from REAL_ESTATE;
+————+
| min(PRICE) |
+————+
| 15000 |
+————+
1 row in set (0.00 sec)
В выборке минимальное значение цены, встречающееся в таблице REAL_ESTATE
Можно выбрать также максимальное значение
select max(PRICE) from REAL_ESTATE;
+————+
| max(PRICE) |
+————+
| 50000 |
+————+
1 row in set (0.00 sec)
Оператор sum сложит все встречающиеся значения в колонке
select sum(PRICE) from REAL_ESTATE;
+————+
| sum(PRICE) |
+————+
| 485000 |
+————+
1 row in set (0.00 sec)
count используется чаще всего и считает количество вхождений, так приведенный ниже запрос выдаст 13, потому, что в таблице REAL_ESTATE 13 записей.
select count(PRICE) from REAL_ESTATE;
+—————+
| count(PRICE) |
+—————+
| 13 |
+—————+
1 row in set (0.00 sec)
Все операторы можно использовать с JOIN-ами, т.е. получая информацию из различных таблиц.
select count(PEOPLE.PRICE) from REAL_ESTATE, PEOPLE where PEOPLE.CITY = REAL_ESTATE.CITY;
+———————+
| count(PEOPLE.PRICE) |
+———————+
| 6 |
+———————+
1 row in set (0.00 sec)
Часто при этом может возникать ситуация при которой определенные значения считаются дважды. Избежать этого можно стандартным способом образом добавив после SELECT ключевое слово DISTINCT.