ClickHouse/docs/zh/sql-reference/statements/select/distinct.md
2020-06-22 11:45:22 +03:00

2.0 KiB

machine_translated machine_translated_rev toc_title
true 5decc73b5d DISTINCT

DISTINCT子句

如果 SELECT DISTINCT 如果指定,则查询结果中只保留唯一行。 因此,在结果中所有完全匹配的行集合中,只有一行将保留。

空处理

DISTINCT 适用于 NULL 就好像 NULL 是一个特定的值,并且 NULL==NULL. 换句话说,在 DISTINCT 结果,不同的组合 NULL 仅发生一次。 它不同于 NULL 在大多数其他上下文中进行处理。

替代办法

通过应用可以获得相同的结果 GROUP BY 在同一组值指定为 SELECT 子句,而不使用任何聚合函数。 但有几个区别 GROUP BY 方法:

  • DISTINCT 可以一起应用 GROUP BY.
  • ORDER BY 省略和 LIMIT 定义时,查询在读取所需数量的不同行后立即停止运行。
  • 数据块在处理时输出,而无需等待整个查询完成运行。

限制

DISTINCT 如果不支持 SELECT 具有至少一个数组列。

ClickHouse支持使用 DISTINCTORDER 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 分拣前被切割。

在编程查询时考虑这种实现特异性。