メインコンテンツへスキップ

フィルタ付き集約を使う

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
詳しくは、ドキュメントの集約関数コンビネータページを参照してください。
最終更新日 2026年6月10日