Уникальные записи в SQL: выборка без дубликатов в column2

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для отбора уникальных записей в SQL примените ключевое слово DISTINCT в вашем запросе SELECT. Чтобы выбрать уникальные значения одного столбца, например email, отправьте следующий запрос:

SQL
Скопировать код
SELECT DISTINCT email FROM customers;

Если вам требуется выбрать уникальные комбинации из нескольких столбцов, наподобие first_name и last_name, вот как это сделать:

SQL
Скопировать код
SELECT DISTINCT first_name, last_name FROM customers;

Эти два запроса исключают повторяющиеся значения. Во втором запросе достигается уникальность за счёт комбинирования значений двух столбцов.

Кинга Идем в IT: пошаговый план для смены профессии

Погружаемся в DISTINCT

Применение DISTINCT простое в основных ситуациях. Рассмотрим, как справиться с объединениями и несколькими столбцами, чтобы не столкнуться с нежелательными дубликатами:

SQL
Скопировать код
-- "Уровень уникальности: Джон Уик"
SELECT DISTINCT c.customer_id, o.order_id
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id;

Этот запрос обеспечивает уникальность объединённых данных, сохраняя чистоту и аккуратность информации.

Знакомство с командой GROUP BY

Когда речь идёт о агрегатных функциях или больших массивах данных, команда GROUP BY становится актуальной, действуя как главный стратег:

SQL
Скопировать код
-- "Группируемся, словно пятничный вечер!"
SELECT city, COUNT(*) as population
FROM customers
GROUP BY city;

Этот запрос отображает количество жителей по городам среди клиентов. GROUP BY группирует данные по одинаковым значениям указанного столбца.

ROW_NUMBER(): секретный ингредиент

Потребуется особый подход к уникальности? Оконные функции в связке с ROW_NUMBER() в рамках Общего Табличного Выражения (CTE) смогут предложить решение:

SQL
Скопировать код
-- "Властелин строк – Возвращение Row_Number"
WITH ranked_customers AS (
  SELECT *,
  ROW_NUMBER() OVER (PARTITION BY email ORDER BY signup_date DESC) AS rn
  FROM customers
)
SELECT * FROM ranked_customers WHERE rn = 1;

Такой запрос отсортировывает клиентов по дате регистрации, выбирая только тех, кто зарегистрировался позже всех, с уникальной электронной почтой.

Визуализация

Представим библиотеку книг (📚), где каждая книга — это запись в базе данных:

Markdown
Скопировать код
📚📚📚📚📚📚📚📚📚
📘📗📕📘📗📕📗📘📕

🔍 Это — наша задача: отыскать все уникальные экземпляры, исключая дубликаты.

SQL
Скопировать код
SELECT DISTINCT title FROM books;

Таким образом, перед нами отображаются аккуратно организованные выбранные данные:

Markdown
Скопировать код
📚📚📚
📘📗📕

Без дубликатов! Вот именно так SELECT DISTINCT обеспечивает уникальные значения в нашем запросе.

Особенности SQL

Каждый диалект SQL преподносит свои уникальности. В PostgreSQL есть операция DISTINCT ON, которая помогает отобрать уникальные события по местоположению:

SQL
Скопировать код
-- "Идеальное DISTINCT-ционирование"
SELECT DISTINCT ON (location) location, event_date FROM events ORDER BY location, event_date DESC;

При возникновении сомнений всегда советуйтесь с синтаксисом SQL истины, с которой вы работаете.

Решение проблем производительности

При выборке из больших наборов данных размер имеет значение. Сравните эффективность DISTINCT с GROUP BY или подзапросами:

SQL
Скопировать код
-- "Быстрые и DISTINCTные: SQL Дрифт"
SELECT DISTINCT title FROM books;

Индексированный столбец обычно ускоряет DISTINCT, однако экспериментирование — ключ к выбору между DISTINCT, GROUP BY и подзапросами.

Реальность

В практике в конкретных сценариях определяются, какие столбцы следует выбирать для DISTINCT:

SQL
Скопировать код
-- "Когда жизнь дарит тебе адреса, сделай из них DISTINCT-ые адреса."
SELECT DISTINCT addresses FROM customers;

Если разные клиенты используют один и тот же адрес, применение DISTINCT поможет связать их. Тщательно изучите свою модель данных.

Работа с несколькими столбцами

Когда речь идёт о составных ключах — наборах столбцов, которые в совокупности уникальны — DISTINCT всё ещё актуален:

SQL
Скопировать код
-- "Ослепительно DISTINCT"
SELECT DISTINCT country, city FROM addresses;

Этот запрос выведет уникальные сочетания городов для каждой страны.