Описание
Комбинатор ForEach
можно применить к агрегатной функции sum, чтобы превратить её из агрегатной
функции, работающей со значениями строк, в агрегатную функцию, работающую со
столбцами типа Array и выполняющую агрегацию для каждого элемента массива по всем строкам.
Пример использования
В этом примере мы будем использовать набор данных hits, доступный в нашей Песочнице ClickHouse.
Таблица hits содержит столбец isMobile типа UInt8, который может принимать значение
0 для настольных устройств или 1 для мобильных:
SELECT EventTime, IsMobile FROM metrica.hits ORDER BY rand() LIMIT 10Мы будем использовать агрегатную функцию-комбинатор sumForEach, чтобы проанализировать, как
трафик с настольных и мобильных устройств меняется в зависимости от часа суток. Нажмите кнопку
play ниже, чтобы интерактивно выполнить запрос:
SELECT
toHour(EventTime) AS hour_of_day,
-- Используем sumForEach, чтобы за один проход подсчитать визиты с настольных и мобильных устройств
sumForEach([
IsMobile = 0, -- Визиты с настольных устройств (IsMobile = 0)
IsMobile = 1 -- Визиты с мобильных устройств (IsMobile = 1)
]) AS device_counts
FROM metrica.hits
GROUP BY hour_of_day
ORDER BY hour_of_day;