# Агрегатные функции

Агрегатная функция используется в [DQL](dql.md)-командах для получения
единственного результата из набора входных значений.

## Синтаксис {: #syntax }

![AGGREGATE](../../images/ebnf/aggregate.svg)

### Выражение {: #expression }

??? note "Диаграмма"
    ![Expression](../../images/ebnf/expression.svg)

### Литерал {: #literal }

??? note "Диаграмма"
    ![Literal](../../images/ebnf/literal.svg)

## Функции {: #functions }

Поддерживаются следующие агрегатные функции:

* **AVG** — среднее значение;
* **COUNT** — количество значений в колонке;
* **MIN** — минимальное значение;
* **MAX** — максимальное значение;
* **SUM** — сумма значений (если строк нет, возвращает `NULL`);
* **TOTAL** — сумма значений (если строк нет, возвращает `0`);
* **GROUP_CONCAT** — соединяет строковые значения выражений с помощью
  разделителя;
* **STRING_AGG** — то же, что и `GROUP_CONCAT`. Данный алиас
  используется для совместимости с PostgreSQL.

Функции `AVG`, `MIN`, `MAX`, `SUM` являются [строгими](../../overview/glossary.md#strict_function).

## Параметры {: #params }

* **DISTINCT** — возвращает только уникальные значения выражений.

## Примеры {: #examples }

??? example "Тестовые таблицы"
    Примеры использования команд включают в себя запросы к [тестовым
    таблицам](../legend.md).

Подсчет общего числа товаров на складе:

```sql
SELECT SUM(stock) FROM items;
```

Получение строки из имен, соединенных через запятую:

```sql
SELECT GROUP_CONCAT(name, ', ') FROM items;
```

или:

```sql
SELECT STRING_AGG(name, ', ') FROM items;
```


Вывод в консоль:

```
+------------------------------------------------+
| COL_1                                          |
+================================================+
| "metalware, adhesives, moldings, bars, blocks" |
+------------------------------------------------+
(1 rows)
```
