DISTINCT 子句
如果指定了 SELECT DISTINCT
,查询结果中只会保留唯一的行。这样,所有完全匹配的行中只会保留一行。
您可以指定必须具有唯一值的列列表:SELECT DISTINCT ON (column1, column2,...)
。如果未指定列,则所有列都会被考虑在内。
考虑以下表:
使用 DISTINCT
而不指定列:
使用 DISTINCT
并指定列:
DISTINCT 和 ORDER BY
ClickHouse 支持在一个查询中对不同列使用 DISTINCT
和 ORDER BY
子句。DISTINCT
子句在 ORDER BY
子句之前执行。
考虑以下表:
选择数据:
使用不同的排序方向选择数据:
行 2, 4
在排序前已被截取。
在编写查询时请考虑这一实现特性。
NULL 处理
DISTINCT
处理 NULL 的方式就像 NULL
是一个特定值,并且 NULL==NULL
。换句话说,在 DISTINCT
结果中,与 NULL
的不同组合只会出现一次。这与大多数其他上下文中的 NULL
处理有所不同。
替代方法
可以通过在与 SELECT
子句中指定的相同值集合上应用 GROUP BY 来获得相同的结果,而不使用任何聚合函数。但与 GROUP BY
方法有一些不同之处: