mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-10-07 17:10:49 +00:00
cd14f9ebcb
* split up select.md * array-join.md basic refactoring * distinct.md basic refactoring * format.md basic refactoring * from.md basic refactoring * group-by.md basic refactoring * having.md basic refactoring * additional index.md refactoring * into-outfile.md basic refactoring * join.md basic refactoring * limit.md basic refactoring * limit-by.md basic refactoring * order-by.md basic refactoring * prewhere.md basic refactoring * adjust operators/index.md links * adjust sample.md links * adjust more links * adjust operatots links * fix some links * adjust aggregate function article titles * basic refactor of remaining select clauses * absolute paths in make_links.sh * run make_links.sh * remove old select.md locations * translate docs/es * translate docs/fr * translate docs/fa * remove old operators.md location * change operators.md links * adjust links in docs/es * adjust links in docs/es * minor texts adjustments * wip * update machine translations to use new links * fix changelog * es build fixes * get rid of some select.md links * temporary adjust ru links * temporary adjust more ru links * improve curly brace handling * adjust ru as well * fa build fix * ru link fixes * zh link fixes * temporary disable part of anchor checks
59 lines
1.9 KiB
Markdown
59 lines
1.9 KiB
Markdown
# DISTINCT Clause {#select-distinct}
|
|
|
|
If `SELECT DISTINCT` is specified, only unique rows will remain in a query result. Thus only a single row will remain out of all the sets of fully matching rows in the result.
|
|
|
|
## Null Processing
|
|
|
|
`DISTINCT` works with [NULL](../../syntax.md#null-literal) as if `NULL` were a specific value, and `NULL==NULL`. In other words, in the `DISTINCT` results, different combinations with `NULL` occur only once. It differs from `NULL` processing in most other contexts.
|
|
|
|
## Alternatives
|
|
|
|
It is possible to obtain the same result by applying [GROUP BY](group-by.md) across the same set of values as specified as `SELECT` clause, without using any aggregate functions. But there are few differences from `GROUP BY` approach:
|
|
|
|
- `DISTINCT` can be applied together with `GROUP BY`.
|
|
- When [ORDER BY](order-by.md) is omitted and [LIMIT](limit.md) is defined, the query stops running immediately after the required number of different rows has been read.
|
|
- Data blocks are output as they are processed, without waiting for the entire query to finish running.
|
|
|
|
## Limitations
|
|
|
|
`DISTINCT` is not supported if `SELECT` has at least one array column.
|
|
|
|
## Examples
|
|
|
|
ClickHouse supports using the `DISTINCT` and `ORDER BY` clauses for different columns in one query. The `DISTINCT` clause is executed before the `ORDER BY` clause.
|
|
|
|
Example table:
|
|
|
|
``` text
|
|
┌─a─┬─b─┐
|
|
│ 2 │ 1 │
|
|
│ 1 │ 2 │
|
|
│ 3 │ 3 │
|
|
│ 2 │ 4 │
|
|
└───┴───┘
|
|
```
|
|
|
|
When selecting data with the `SELECT DISTINCT a FROM t1 ORDER BY b ASC` query, we get the following result:
|
|
|
|
``` text
|
|
┌─a─┐
|
|
│ 2 │
|
|
│ 1 │
|
|
│ 3 │
|
|
└───┘
|
|
```
|
|
|
|
If we change the sorting direction `SELECT DISTINCT a FROM t1 ORDER BY b DESC`, we get the following result:
|
|
|
|
``` text
|
|
┌─a─┐
|
|
│ 3 │
|
|
│ 1 │
|
|
│ 2 │
|
|
└───┘
|
|
```
|
|
|
|
Row `2, 4` was cut before sorting.
|
|
|
|
Take this implementation specificity into account when programming queries.
|