DISTINCT 句
SELECT DISTINCT が指定されている場合、クエリ結果には一意の行だけが残ります。つまり、結果内で完全に一致する行の集合ごとに、1 行だけが残ります。
一意でなければならない値を持つ列のリストを指定できます: SELECT DISTINCT ON (column1, column2,...)。列が指定されていない場合、すべての列が考慮されます。
次のテーブルを考えます:
列を指定せずに DISTINCT を使用する:
特定の列に対して DISTINCT を使用する:
DISTINCT と ORDER BY
ClickHouse では、1 つのクエリ内で DISTINCT 句と ORDER BY 句に異なる列を指定できます。DISTINCT 句は ORDER BY 句より先に実行されます。
次のテーブルを例にします。
データの選択:
ソート順を変えてデータを取得する:
行 2, 4 はソートの前に除外されました。
クエリを記述する際には、このような実装上の特性を考慮してください。
NULL の処理
DISTINCT は、NULL を特定の値であり、かつ NULL==NULL が成り立つかのように扱います。言い換えると、DISTINCT の結果においては、NULL を含む異なる組み合わせは 1 回しか出現しません。これは、他のほとんどのコンテキストにおける NULL の処理とは異なります。
代替方法
集約関数を一切使用せずに、SELECT 句で指定されたものと同じ値の集合に対して GROUP BY を適用することで、同じ結果を得ることも可能です。ただし、この場合は GROUP BY を用いる方法とはいくつかの違いがあります。