MySQL функции min, max, sum, avg, count

Операторы 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.

 

Подробнее про DISTINCT и JOIN.