> For the complete documentation index, see [llms.txt](https://evgenii-afanasev.gitbook.io/ruby-course/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://evgenii-afanasev.gitbook.io/ruby-course/12_database/5_aggregation.md).

# Агрегация данных

Мы научились создавать данные, научились фильтровать, а также объединять. В большинстве случаев этого может бытьи достаточно, но SQL предоставляет функционал и для группировки этих данных. Что такое группировка ? Группировка позволяет обединять данные по одинаковым значениям и выполнять к этим данным пгрегатционную функцию.

Для того, чтобы сгрупировать данные по колонке необходимо воспользоваться оператором `GROUP BY` с передачей в качестве аргумента название колонки. Пример:

```sql
SELECT название колонки FROM название_таблицы GROUP BY название колонки
```

В данном примере мы получим все возможные уникальные значения у колонки за счет их группировки. Но куда более интересно можно работать с использованием функций агрегирования. Для начала разберем их:

* SUM() - суммирует значения столбца.
* COUNT() - подсчитывает количество записей в столбце.
* AVG() - вычисляет среднее значение в столбце.
* MIN() - находит минимальное значение в столбце.
* MAX() - находит максимальное значение столбца.

Например, мы хотим получить информацию о потенциальном доходе с продукции в нашем интернет магазине, сгруппированной по производителю. Сделать это можно следующим образом:

```sql
SELECT manufacture, SUM(price) FROM items GROUP BY manufacture
```

В данном примере мы группируем все наши товары по названию производителя, а для сгруппированных данных находим сумму значений из колонки price.

Дркгим примером может послужить запрос на получение кол-ва покупателей с именем John:

```sql
SELECT first_name, COUNT(*) FROM customers GROUP BY first_name
```

Обратите внимание, что мы не можем выводить другие столбцы в результате выборки, так как значения могут быть везде разными, а SQL не знает какое именно нужно показать. При этом мы можем использовать это значение внутри функции агрегации.

Кроме того, мы можем использовать несколько групировок с помощью перечисления названий таблиц через запятую. Сначала группируются данные по первой указанной колонке, после этого среди строк с одинаковым значением происходит группировка по второй укзаанной таблице и так далее.
