# Операции группировки

Операции **группировки** в SQL нужны для того, чтобы объединять строки по какому-то признаку и уже к каждой группе применять агрегирующие функции.

***

#### 📌 Основное — `GROUP BY`

* Синтаксис:

  ```sql
  SELECT колонка_группировки, агрегатная_функция(...)
  FROM таблица
  GROUP BY колонка_группировки;
  ```
* Пример: количество заказов по каждому клиенту:

  ```sql
  SELECT customer_id, COUNT(*) AS order_count
  FROM orders
  GROUP BY customer_id;
  ```

***

#### 📌 Несколько колонок

Можно группировать сразу по нескольким полям:

```sql
SELECT department, job_title, AVG(salary) AS avg_salary
FROM employees
GROUP BY department, job_title;
```

→ Средняя зарплата в разрезе "отдел + должность".

***

#### 📌 `HAVING` для фильтрации групп

Фильтрация после группировки (в отличие от `WHERE`, которое фильтрует строки до неё):

```sql
SELECT department, COUNT(*) AS emp_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;
```

→ Показать только те отделы, где больше 5 сотрудников.

***

#### 📌 Итоговые операции группировки

1. **По одному полю** – группируем по одному признаку.
2. **По нескольким полям** – создаём более детальные группы.
3. **С подзапросами** – можно сначала сгруппировать, потом использовать результат во внешнем запросе.
4. **С HAVING** – фильтрация именно сгруппированных данных.

***

🔑 **Разница между агрегированием и группировкой**:

* **Агрегатные функции** дают одно значение для множества строк.
* **Группировка** разбивает данные на группы, к которым можно применить агрегаты.


---

# 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://kaze.gitbook.io/qa-theory/bazy-dannykh/operacii-gruppirovki.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.
