Условие 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: