Как вывести набор уникальных значений в SQL-запросе?

«Как вывести набор уникальных значений в SQL-запросе?» — вопрос из категории Базы данных и SQL, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для выборки уникальных значений из столбца или набора столбцов в SQL используется оператор DISTINCT.

Базовый синтаксис:

-- Вывести уникальные значения из одного столбца 'status'
SELECT DISTINCT status FROM orders;

-- Вывести уникальные комбинации значений из нескольких столбцов
SELECT DISTINCT customer_id, product_category FROM purchases;

Примеры с контекстом тестирования:

  1. Проверка справочников или enum-полей:

    -- Узнать, какие уникальные статусы заказов существуют в системе
    SELECT DISTINCT order_status FROM test_orders;
    -- Ожидаемый результат: 'NEW', 'PROCESSING', 'SHIPPED', 'DELIVERED', 'CANCELLED'

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

  2. Поиск дубликатов (обратная задача):

    -- Найти дублирующиеся email в таблице пользователей (тест на целостность данных)
    SELECT email, COUNT(*) as count
    FROM users
    GROUP BY email
    HAVING COUNT(*) > 1;
  3. Использование в подзапросе для подготовки тестовых данных:

    -- Выбрать по одному уникальному товару из каждой категории для теста
    SELECT * FROM products
    WHERE id IN (
        SELECT MIN(id) FROM products
        GROUP BY category_id -- Группировка для уникальности по категории
    );

Важно: DISTINCT применяется ко всем столбцам, перечисленным в SELECT. Для больших таблиц эта операция может быть ресурсоемкой.