Перейти к основному содержанию
Перейти к основному содержанию

sumForEach

Описание

Комбинатор ForEach может быть применён к агрегатной функции sum, чтобы преобразовать её из агрегатной функции, работающей со значениями строк, в агрегатную функцию, работающую со столбцами-массивами и применяющую агрегирование к каждому элементу массива по всем строкам.

Пример использования

В этом примере мы воспользуемся набором данных hits, доступным в нашем SQL playground.

Таблица hits содержит столбец isMobile типа UInt8, который может быть 0 для настольных устройств или 1 для мобильных:

SELECT EventTime, IsMobile FROM metrica.hits ORDER BY rand() LIMIT 10

Мы воспользуемся агрегатным комбинатором sumForEach, чтобы проанализировать, как по часам суток отличается трафик с десктопных и мобильных устройств. Нажмите кнопку воспроизведения ниже, чтобы интерактивно выполнить запрос:

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;

См. также