SQL DISTINCT
Давайте сразу скажем: в какой-то момент вашей работы с данными вы столкнетесь с дубликатами в ваших данных. Они могут быть введены из неисправного источника данных или созданы в процессе объединения и трансформации данных. Для последнего сценария может потребоваться более сложное или переработанное решение, но никогда не помешает знать, как использовать DISTINCT в запросе.
Использование DISTINCT в операторе SELECT заставит запрос возвращать только уникальные строки. Вы можете часто видеть предложение DISTINCT в функциях COUNT для получения количества уникальных строк.
Как использовать SQL DISTINCT в запросе
Чтобы удалить дублирующиеся строки из запроса, добавьте DISTINCT сразу после SELECT, за которым следуют строки, которые вы хотите выбрать:
select
distinct
row_1,
row_2
from my_data_source
Давайте рассмотрим практический пример использования DISTINCT ниже.
Пример SQL DISTINCT
select
count(customer_id) as cnt_all_orders,
count(distinct customer_id) as cnt_distinct_customers
from {{ ref('orders') }}
Этот простой запрос может быть выполнен во время начального исследования ваших данных; он вернет количество customer_ids
и количество уникальных customer_ids
, которые появляются в таблице orders
Jaffle Shop:
cnt_all_orders | cnt_distinct_customers |
---|---|
99 | 62 |
Как видно из результатов запроса, клиенты разместили 99 заказов, но в таблице только 62 уникальных клиента.
Синтаксис DISTINCT в Snowflake, Databricks, BigQuery и Redshift
Поскольку это основа SQL, все современные хранилища данных поддерживают возможность использования DISTINCT в операторе SELECT 😀
Сценарии использования DISTINCT
Чаще всего вы увидите запросы с использованием оператора DISTINCT для:
-
Удаления ненужных дублирующихся строк из модели данных; предупреждение: если вам нужно использовать DISTINCT в модели, не являющейся исходной, которая содержит объединения, существует вероятность того, что может быть ошибочная логика, создающая дубликаты в данных, поэтому всегда дважды проверяйте, что это действительно дубликаты.
-
Поиска количества уникальных полей в наборе данных, особенно для первичных или суррогатных ключей.
Это не исчерпывающий список того, где ваша команда может использовать DISTINCT в процессе разработки, моделях dbt и логике BI-инструментов, но он содержит некоторые общие сценарии, с которыми аналитики сталкиваются ежедневно.