ClickHouse/docs/ru/sql-reference/statements/select/distinct.md
Roman Bug 9ec78855cd
DOCSUP-2806: Add meta header in RU (#15801)
* DOCSUP-2806: Add meta intro.

* DOCSUP-2806: Update meta intro.

* DOCSUP-2806: Fix meta.

* DOCSUP-2806: Add quotes for meta headers.

* DOCSUP-2806: Remove quotes from meta headers.

* DOCSUP-2806: Add meta headers.

* DOCSUP-2806: Fix quotes in meta headers.

* DOCSUP-2806: Update meta headers.

* DOCSUP-2806: Fix link to nowhere in EN.

* DOCSUP-2806: Fix link (settings to tune)

* DOCSUP-2806: Fix links.

* DOCSUP-2806:Fix links EN

* DOCSUP-2806: Fix build errors.

* DOCSUP-2806: Fix meta intro.

* DOCSUP-2806: Fix toc_priority in examples datasets TOC.

* DOCSUP-2806: Fix items order in toc.

* DOCSUP-2806: Fix order in toc.

* DOCSUP-2806: Fix toc order.

* DOCSUP-2806: Fix order in toc.

* DOCSUP-2806: Fix toc index in create

* DOCSUP-2806: Fix toc order in create.

Co-authored-by: romanzhukov <romanzhukov@yandex-team.ru>
Co-authored-by: alexey-milovidov <milovidov@yandex-team.ru>
2020-10-26 13:29:30 +03:00

3.1 KiB
Raw Blame History

toc_title
DISTINCT

Секция DISTINCT

Если указан SELECT DISTINCT, то в результате запроса останутся только уникальные строки. Таким образом, из всех наборов полностью совпадающих строк в результате останется только одна строка.

Обработк NULL

DISTINCT работает с NULL как-будто NULL — обычное значение и NULL==NULL. Другими словами, в результате DISTINCT, различные комбинации с NULL встретятся только один раз. Это отличается от обработки NULL в большинстве других контекстов.

Альтернативы

Такой же результат можно получить, применив секцию GROUP BY для того же набора значений, которые указан в секции SELECT, без использования каких-либо агрегатных функций. Но есть от GROUP BY несколько отличий:

  • DISTINCT может применяться вместе с GROUP BY.
  • Когда секция ORDER BY опущена, а секция LIMIT присутствует, запрос прекращает выполнение сразу после считывания необходимого количества различных строк.
  • Блоки данных выводятся по мере их обработки, не дожидаясь завершения выполнения всего запроса.

Ограничения

DISTINCT не поддерживается, если SELECT имеет по крайней мере один столбец-массив.

Примеры

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 был разрезан перед сортировкой.

Учитывайте эту специфику при разработке запросов.