Секция DISTINCT
Если указан SELECT DISTINCT
, то в результате запроса останутся только уникальные строки. Таким образом, из всех наборов полностью совпадающих строк в результате останется только одна строка.
Вы можете указать столбцы, по которым хотите отбирать уникальные значения: SELECT DISTINCT ON (column1, column2,...)
. Если столбцы не указаны, то отбираются строки, в которых значения уникальны во всех столбцах.
Рассмотрим таблицу:
Использование DISTINCT
без указания столбцов:
Использование DISTINCT
с указанием столбцов:
DISTINCT и ORDER BY
ClickHouse поддерживает использование секций DISTINCT
и ORDER BY
для разных столбцов в одном запросе. Секция DISTINCT
выполняется до секции ORDER BY
.
Таблица для примера:
При выборе данных с помощью SELECT DISTINCT a FROM t1 ORDER BY b ASC
, мы получаем следующий результат:
Если мы изменим направление сортировки SELECT DISTINCT a FROM t1 ORDER BY b DESC
, мы получаем следующий результат:
Ряд 2, 4
был разрезан перед сортировкой.
Учитывайте эту специфику при разработке запросов.
Обработка NULL
DISTINCT
работает с NULL как будто NULL
— обычное значение и NULL==NULL
. Другими словами, в результате DISTINCT
, различные комбинации с NULL
встретятся только один раз. Это отличается от обработки NULL
в большинстве других контекстов.
Альтернативы
Можно получить такой же результат, применив GROUP BY для того же набора значений, которые указан в секции SELECT
, без использования каких-либо агрегатных функций. Но есть несколько отличий от GROUP BY
: