mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-04 21:42:39 +00:00
3.3 KiB
3.3 KiB
slug | sidebar_label |
---|---|
/ja/sql-reference/statements/select/distinct | DISTINCT |
DISTINCT句
SELECT DISTINCT
が指定されている場合、クエリ結果にはユニークな行だけが残ります。つまり、結果内で完全に一致する行のセットからは、単一の行のみが残ります。
ユニークな値を持つべきカラムのリストを指定できます: SELECT DISTINCT ON (column1, column2,...)
。カラムが指定されていない場合は、すべてが考慮されます。
以下のテーブルを考えてみましょう:
┌─a─┬─b─┬─c─┐
│ 1 │ 1 │ 1 │
│ 1 │ 1 │ 1 │
│ 2 │ 2 │ 2 │
│ 2 │ 2 │ 2 │
│ 1 │ 1 │ 2 │
│ 1 │ 2 │ 2 │
└───┴───┴───┘
カラムを指定せずにDISTINCT
を使用する場合:
SELECT DISTINCT * FROM t1;
┌─a─┬─b─┬─c─┐
│ 1 │ 1 │ 1 │
│ 2 │ 2 │ 2 │
│ 1 │ 1 │ 2 │
│ 1 │ 2 │ 2 │
└───┴───┴───┘
カラムを指定してDISTINCT
を使用する場合:
SELECT DISTINCT ON (a,b) * FROM t1;
┌─a─┬─b─┬─c─┐
│ 1 │ 1 │ 1 │
│ 2 │ 2 │ 2 │
│ 1 │ 2 │ 2 │
└───┴───┴───┘
DISTINCTとORDER BY
ClickHouseは、異なるカラムに対してDISTINCT
およびORDER BY
句を使用することをサポートしています。DISTINCT
句はORDER BY
句よりも先に実行されます。
以下のテーブルを考えてみましょう:
┌─a─┬─b─┐
│ 2 │ 1 │
│ 1 │ 2 │
│ 3 │ 3 │
│ 2 │ 4 │
└───┴───┘
データを選択する場合:
SELECT DISTINCT a FROM t1 ORDER BY b ASC;
┌─a─┐
│ 2 │
│ 1 │
│ 3 │
└───┘
異なるソート順でデータを選択する場合:
SELECT DISTINCT a FROM t1 ORDER BY b DESC;
┌─a─┐
│ 3 │
│ 1 │
│ 2 │
└───┘
行2, 4
はソートの前にカットされました。
クエリをプログラムするときには、この実装の特性に注意してください。
NULLの処理
DISTINCT
は、NULLを特定の値とみなして処理し、NULL==NULL
であるかのように動作します。言い換えれば、DISTINCT
の結果では、NULL
との異なる組み合わせは一度だけ発生します。他の多くの文脈におけるNULL
の処理とは異なります。
代替案
SELECT
句で指定した同じ値のセットに対してGROUP BYを適用することで、集計関数を使用せずに同じ結果を得ることができます。しかし、GROUP BY
アプローチとはいくつかの違いがあります: