フィルタ付き集約を使う
ClickHouse では、フィルタ付き集約をシンプルかつ直感的に記述できます。
たとえば、フィルタ付き集約を記述する標準的な SQL の書き方 (ClickHouse でも問題なく使用できます) と、任意の集約関数に追加できる -If 集約関数コンビネータを使う短縮構文を比較してみましょう。
--標準SQL
SELECT
avg(number)
FILTER (WHERE number > 50)
FROM numbers(100)
--集約コンビネータを使用したClickHouse
SELECT
avgIf(number, number > 50)
FROM numbers(100)同様に、-Distinct という集約コンビネータもあります:
--標準SQL
SELECT avg(DISTINCT number)
--集約コンビネータを使用したClickHouse
SELECT avgDistinct(number)なぜフィルタ付き集約が重要なのでしょうか。それは、ウェブアナリティクスサービスで "セグメント比較" 機能を実装できるからです。 たとえば:
WITH
Region = 'us' AS segment1,
Browser = 'Chrome' AS segment2
SELECT
uniqIf(UserID, segment1),
uniqIf(UserID, segment2)
WHERE segment1 OR segment2詳しくは、ドキュメントの集約関数コンビネータページを参照してください。