説明
ForEach コンビネータは、
sum 集約関数に適用できます。これにより、行の値に対して動作する集約
関数を、Arrayカラムに対して動作する集約関数に変換し、複数の行にまたがって Array 内の各要素に集約を適用できます。
使用例
この例では、SQL playground で利用できる hits データセットを使用します。
hits テーブルには isMobile という UInt8 型のカラムがあり、デスクトップなら 0、モバイルなら 1 です。
SELECT EventTime, IsMobile FROM metrica.hits ORDER BY rand() LIMIT 10sumForEach 集約 コンビネータ 関数を使って、デスクトップとモバイルのトラフィックが時間帯によってどのように変化するかを分析します。以下の再生ボタンをクリックすると、クエリを対話的に実行できます。
SELECT
toHour(EventTime) AS hour_of_day,
-- sumForEach を使って、デスクトップとモバイルの訪問数を 1 回で集計
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;