* 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>
3.1 KiB
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
был разрезан перед сортировкой.
Учитывайте эту специфику при разработке запросов.