📊 Агрегатные функции в ClickHouse — это не просто sum и avg

🔥 Главная мысль

Когда говорят “агрегатные функции”, многие вспоминают только:

• sum() • avg() • count()

Но в ClickHouse мир агрегатных функций намного богаче.

И это очень важно, потому что именно агрегаты делают ClickHouse сильным аналитическим движком.

Агрегация — это объединение строк по ключу, где на каждую группу мы получаем одну итоговую строку.

А агрегатные функции — это инструкция, как именно объединять значения внутри этой группы.

🟢 Плюсы:

• можно считать не только сумму и среднее • удобно искать экстремумы, уникальности, квантили • есть агрегаты для реальных аналитических сценариев • есть комбинаторы, которые расширяют поведение функций

Пример плюса: если ты хочешь не просто узнать максимальное время ответа, а понять, когда именно оно было, можно использовать argMax(timestamp, response_time).

🔴 Минусы:

• новички часто знают только базовые агрегаты • без понимания комбинаторов теряется половина силы ClickHouse • можно написать корректный SQL, но получить не ту бизнес-логику • некоторые агрегаты требуют понимания, что именно они возвращают

Пример минуса: человек хочет “95-й перцентиль”, но считает avg(), и получает красивую, но не очень полезную цифру.

🧪 Живые примеры

Полезные агрегатные функции:

• count() — количество строк • uniq(expr) — количество уникальных значений • min() / max() — минимум и максимум • argMin(arg, val) / argMax(arg, val) — значение одного поля из строки с min/max другого поля • quantile(level)(expr) — квантиль, например 0.95 или 0.99

Очень полезная мысль:

argMax(timestamp, response_time) отвечает не на вопрос “какое было максимальное время ответа?”, а на вопрос “в какой момент было максимальное время ответа?”

Это уже сильно ближе к реальной аналитике.

Ещё один важный класс — комбинаторы агрегатных функций.

Например:

• -If • -Array • -Map • -Distinct • -State / -Merge / -MergeState • -Resample(...)

Что это даёт на практике:

• quantileIf(...) — считать квантиль только по нужным строкам • uniqArray(...) — агрегировать массивы • sumDistinct(...) — считать только уникальные значения • State / Merge — работать с промежуточными состояниями агрегации

🏗 Архитектурная мысль

В больших компаниях агрегатные функции — это основа витрин, отчётности и предагрегаций.

Именно они помогают:

• уменьшать объём данных на выходе • превращать raw-события в бизнес-метрики • строить materialized views и агрегированные слои • считать метрики близко к данным, а не после выгрузки

Что это даёт:

• быстрее BI • меньше лишнего трафика • меньше постобработки вне ClickHouse

⚠️ Риски:

• использовать avg там, где нужен quantile • не понимать разницу между max и argMax • игнорировать комбинаторы • тащить агрегатную логику во внешний код, хотя её можно считать в ClickHouse

✅ Вывод

Агрегатные функции в ClickHouse — это не только sum и avg 📈

Это полноценный язык аналитики:

• уникальности • квантили • условные агрегаты • работа с массивами • промежуточные состояния

И чем лучше ты их понимаешь, тем сильнее у тебя становятся витрины и отчёты 🚀

📊 Агрегатные функции в ClickHouse — это не просто sum и avg
🔥 Главная мысль
Когда говорят “агрегатные функции”,
многие вспоминают только:
• sum()
• avg()
• count()
Но в ClickHouse мир агрегатных функц... | Сетка — социальная сеть от hh.ru