Перейти к основному содержимому
Перейти к основному содержимому

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 в большинстве других контекстов.

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

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

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