DISTINCT 句
SELECT DISTINCT
が指定されている場合、クエリの結果にはユニークな行のみが残ります。したがって、結果内の完全に一致する行のセットからは1つの行のみが残ります。
ユニークな値を持つ必要があるカラムのリストを指定することができます: SELECT DISTINCT ON (column1, column2,...)
。カラムが指定されていない場合、すべてのカラムが考慮されます。
テーブルを考えてみましょう:
カラムを指定せずに DISTINCT
を使用する場合:
指定したカラムで DISTINCT
を使用する場合:
DISTINCT と ORDER BY
ClickHouse は、DISTINCT
と ORDER BY
句を異なるカラムに対して1つのクエリで使用することをサポートしています。DISTINCT
句は、ORDER BY
句の前に実行されます。
テーブルを考えてみましょう:
データを選択する場合:
異なるソート方向でデータを選択する場合:
行 2, 4
はソートの前にカットされました。
クエリをプログラミングする際にはこの実装の仕様を考慮してください。
NULL 処理
DISTINCT
は、NULL が特定の値として扱われ、NULL==NULL
のように動作します。言い換えれば、DISTINCT
の結果では、NULL
を含む異なる組み合わせが1回だけ発生します。これは他のほとんどの文脈における NULL
処理とは異なります。
代替手段
同じ結果を得るために、集約関数を使用せずに SELECT
句で指定された同じ値のセットに対して GROUP BY を適用することもできます。しかし、GROUP BY
アプローチにはいくつかの違いがあります: