Оператор 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: