CodeRang
Диалекты

ClickHouse обучение: задачи и практика SQL

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

Обновлено · Команда SQL Arena

Что потренируете

  • Считать метрики через countIf, sumIf и uniq без лишних CASE
  • Группировать события по дням и часам функциями ClickHouse
  • Работать с массивами и функциями для Array
  • Разбирать агрегаты вроде argMax на прикладных примерах
  • Проверять запросы в отдельной ClickHouse-песочнице прямо в браузере

Пример задачи в тренажёре

Так выглядит задача в SQL Arena: условие, редактор, результат и схема базы.

Пред.След.Случайная
ЗаданиеОтправкиAI Mentor
Посчитайте просмотры и покупки по товарам

В таблице product_events хранятся события по товарам. Для каждого товара, у которого была хотя бы одна покупка, выведите product_id, число просмотров views и число покупок purchases. Отсортируйте результат по product_id.

Запрос 1ClickHousev24
SELECT
    product_id,
    countIf(event_type = 'view') AS views,
    countIf(event_type = 'purchase') AS purchases
FROM product_events
GROUP BY product_id
HAVING purchases > 0
ORDER BY product_id;
Отправить
Результатproductsproduct_events
Ответ принят

Разбор запроса ClickHouse SQL на примере

Здесь удобно не строить отдельный CASE для каждого типа события, а использовать комбинатор countIf. Выражение countIf(event_type = 'view') считает только строки, где условие истинно, а второй countIf делает то же для покупок. Для событийных таблиц это характерный приём ClickHouse: условие становится частью агрегатной функции, а запрос остаётся коротким.

GROUP BY product_id собирает все события одного товара в одну строку результата. После группировки появляются две независимые метрики — views и purchases. Тот же подход легко расширить: sumIf пригодится для условной суммы, uniq — для числа уникальных пользователей, а argMax — когда нужно вернуть значение, связанное с максимальным временем или другой метрикой.

HAVING purchases > 0 применяется после агрегации и оставляет только товары, у которых была покупка. WHERE event_type = 'purchase' здесь дал бы другой результат: строки с просмотрами исчезли бы ещё до подсчёта, и views стал бы равен нулю или вообще потерял смысл. ORDER BY product_id задаёт однозначный порядок строк.

Курсы по ClickHouse обычно начинают с базовых SELECT, фильтрации и агрегаций, но для уверенной работы важно отдельно освоить особенности диалекта. Например, условные агрегаты countIf и sumIf позволяют включать условие прямо в агрегатную функцию. Оконные функции ClickHouse решают другую задачу: они вычисляют значения по группе строк, не сворачивая её в одну строку, как GROUP BY. С их помощью удобно строить рейтинги, считать накопительные показатели, сравнивать строку с предыдущей и выбирать первое или последнее событие внутри группы.

SQLClickHouse v24
SELECT
    product_id,
    countIf(event_type = 'view') AS views,
    countIf(event_type = 'purchase') AS purchases
FROM product_events
GROUP BY product_id
HAVING purchases > 0
ORDER BY product_id;
Результат запроса
product_idviewspurchases
121
212
412

Типичные ошибки в задачах ClickHouse

01

Фильтровать покупки в WHERE

Если оставить только purchase-события до GROUP BY, запрос больше не видит просмотры. Для нескольких метрик по разным условиям лучше использовать countIf или sumIf, а уже готовые группы фильтровать через HAVING.

02

Писать только универсальный SQL

Обычные CASE WHEN и COUNT могут решить часть задач, но такая практика почти не знакомит с самим ClickHouse. В этом диалекте стоит отдельно отрабатывать countIf, sumIf, uniq, argMax, функции массивов и функции работы со временем.

03

Не задавать порядок результата

GROUP BY не гарантирует, в каком порядке вернутся строки. Без ORDER BY один и тот же правильный набор данных может выглядеть по-разному, поэтому в учебных задачах и отчётных запросах порядок лучше задавать явно.

Задачи по теме в тренажёре

Курс ClickHouse

После этого примера можно переходить к задачам про события по дням и часовым бакетам, активность пользователей, зрителей товаров и массивы товаров. Например, бесплатные задачи на просмотры и покупки помогают закрепить условные агрегаты, а дальше появляются более сложные выборки с уникальными пользователями и массивами. В SQL Arena у ClickHouse отдельная песочница: запрос выполняется прямо в браузере, устанавливать СУБД локально не нужно. Ответ проверяется не только на тех строках, которые видны в условии, а на скрытых данных, поэтому запрос должен решать задачу в общем виде. Всего в тренажёре 1 192 задачи, причём у каждой задачи свои таблицы. На бесплатном тарифе без карты доступны 292 задачи на всех четырёх диалектах. Для ClickHouse есть отдельный трек и Курс ClickHouse: в курсе теория сопровождается задачами внутри уроков, а первые главы доступны бесплатно. Когда запрос становится сложнее, можно посмотреть EXPLAIN или открыть ER-диаграмму схемы. AI-ментор умеет давать подсказки и объяснять ошибки; бесплатно доступны 10 таких обращений. Для проверки себя без подсказок есть режим «Собеседование» с серверным таймером и отчётом после сессии, бесплатно — одна попытка в день.

Частые вопросы

Как проходит обучение ClickHouse?

Начать стоит с базового SQL, а затем перейти к особенностям ClickHouse: условным агрегатам, работе с датой и временем, массивам, оконным функциям и специализированным функциям. Лучше сразу закреплять каждую конструкцию небольшими запросами, а не ограничиваться чтением синтаксиса.

Какие курсы по ClickHouse нужны начинающему?

Полезен курс, который сочетает SQL-основы с конструкциями, характерными именно для ClickHouse. В программу стоит включить агрегаты, функции семейства If, работу с массивами, временными данными, оконными функциями и разбор реальных запросов.

Как работают оконные функции ClickHouse?

Оконная функция вычисляет значение по набору строк, определённому секцией OVER, но не объединяет эти строки в одну. Через PARTITION BY задают группы, через ORDER BY — порядок внутри них, а функции ROW_NUMBER, RANK, SUM и другие выполняют вычисление по окну.

Где решать ClickHouse задачи?

Для практики подходят задачи, где запрос выполняется именно в ClickHouse, а не в другом SQL-диалекте. Так можно привыкнуть к синтаксису, функциям и поведению ClickHouse на разных типах данных.

Практика ClickHouse: задачи для самостоятельного решения

Откройте ClickHouse-песочницу, начните с бесплатных Easy-задач и переходите к треку или Курсу ClickHouse, когда понадобится последовательная практика.

Решать задачи ClickHouse