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

Мы научились создавать данные, научились фильтровать, а также объединять. В большинстве случаев этого может бытьи достаточно, но 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 не знает какое именно нужно показать. При этом мы можем использовать это значение внутри функции агрегации.

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://evgenii-afanasev.gitbook.io/ruby-course/12_database/5_aggregation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
