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

DISTINCT Clause

Если указан 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, выполнение запроса прекращается немедленно после того, как прочитано требуемое количество различных строк.
  • Данные выводятся по мере их обработки, не дожидаясь завершения всего запроса.