← Назад к вопросам

Как из таблицы вывести только уникальные значения

1.6 Junior🔥 101 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Получение уникальных значений из таблицы SQL

В SQL существует несколько основных способов вывода только уникальных значений из таблицы. Выбор метода зависит от конкретной задачи, производительности и стандарта SQL, который использует ваша СУБД (MySQL, PostgreSQL, Oracle, MS SQL Server и т.д.).

1. Использование ключевого слова DISTINCT

Самый распространённый и базовый способ — это оператор DISTINCT, который применяется в предложении SELECT. Он удаляет дубликаты из результирующего набора данных по всем выбранным столбцам.

-- Уникальные значения из одного столбца
SELECT DISTINCT department
FROM employees;

-- Уникальные комбинации значений из нескольких столбцов
SELECT DISTINCT department, job_title
FROM employees;

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

2. Использование агрегатных функций с GROUP BY

Часто для получения уникальных значений вместе с какой-либо агрегацией (количеством, суммой) используется связка GROUP BY. Сам по себе GROUP BY группирует строки, оставляя уникальные комбинации указанных столбцов.

-- Эквивалентно SELECT DISTINCT department
SELECT department
FROM employees
GROUP BY department;

-- Уникальные комбинации с дополнительной информацией (например, количество)
SELECT department, job_title, COUNT(*) as emp_count
FROM employees
GROUP BY department, job_title;

3. Использование оконных функций (для расширенного отбора)

В современных стандартах SQL (например, для анализа дубликатов) могут применяться оконные функции, такие как ROW_NUMBER(). Это полезно, когда нужно не просто выбрать уникальные значения, а проанализировать или удалить дубликаты на уровне строк.

-- Пример: Выбор одной записи для каждой уникальной комбинации department и job_title
-- (например, самая ранняя по дате приёма)
SELECT department, job_title, hire_date
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY department, job_title ORDER BY hire_date) as rn
    FROM employees
) subquery
WHERE rn = 1;

В этом запросе:

  • PARTITION BY делит данные на группы (аналогично GROUP BY).
  • ORDER BY внутри OVER() определяет, какую строку из группы считать первой (rn = 1).

4. Использование UNION (для объединения наборов)

Оператор UNION по умолчанию объединяет результаты нескольких запросов, автоматически удаляя дубликаты. UNION ALL, в отличие от него, дубликаты сохраняет.

-- Вернёт уникальные города и из офисов, и из адресов сотрудников
SELECT city FROM offices
UNION
SELECT city FROM employee_addresses;

Критические аспекты для QA Engineer

Как инженер по качеству, вы должны понимать не только синтаксис, но и последствия использования этих методов в тестировании:

  • Производительность: DISTINCT и GROUP BY часто требуют сортировки данных, что на больших таблицах может быть ресурсоёмко. UNION также может быть затратным. При тестировании производительности приложения это важный фактор.
  • Контекст тестирования:
    *   При проверке **отчётов** или **выпадающих списков** (например, «Выберите отдел») часто используется `SELECT DISTINCT`. Нужно валидировать, что список действительно не содержит дублей.
    *   `GROUP BY` часто лежит в основе **агрегированных дашбордов**. Здесь нужно проверять не только уникальность, но и корректность сопутствующих агрегатных функций (`COUNT`, `SUM`).
    *   Оконные функции (`ROW_NUMBER`, `RANK`) — мощный инструмент для тестирования сложной бизнес-логики, например, выбора «последней активной сессии пользователя» или «актуальной цены товара».
  • Тестовые данные: Для эффективной проверки запросов на уникальность необходимо готовить тестовые данные, содержащие заведомо повторяющиеся строки. Это позволит убедиться, что запрос работает правильно не только на уникальных данных, но и фильтрует дубликаты.
  • Ожидаемый результат: Ключевой шаг в тестировании — сравнение фактического результата запроса с ожидаемым. При проверке запроса с DISTINCT ожидаемый результат должен быть рассчитан вручную или с помощью эталонного скрипта, чтобы убедиться в отсутствии лишних или пропущенных строк.

Вывод: Базовым и чаще всего применяемым способом является SELECT DISTINCT. Однако для комплексного тестирования функций приложения, работающих с данными, QA-инженеру необходимо понимать все перечисленные методы, их различия и влияние на производительность, чтобы грамотно проектировать тестовые сценарии и валидировать результаты.

Как из таблицы вывести только уникальные значения | PrepBro