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

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

Ответ

В SQL есть два основных подхода:

1. Ключевое слово DISTINCT Удаляет дубликаты из результирующего набора по всем выбранным столбцам.

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

-- Уникальные комбинации из нескольких столбцов
SELECT DISTINCT first_name, last_name FROM users;

2. Агрегация с GROUP BY Позволяет не только удалить дубликаты, но и выполнить вычисления над группами.

-- Уникальные имена с подсчетом количества повторений
SELECT first_name, COUNT(*) as count
FROM users
GROUP BY first_name;

Важные различия:

  • DISTINCT применяется ко всему набору результатов после выборки.
  • GROUP BY группирует строки перед применением агрегатных функций (COUNT, SUM, AVG).
  • Для производительности на больших таблицах с GROUP BY часто нужны индексы по группируемым полям.

В коде (Python):

# Использование set (порядок не сохраняется)
data = [1, 2, 2, 3, 1]
unique_data = list(set(data))  # [1, 2, 3]

# Сохранение порядка появления (Python 3.7+)
from collections import OrderedDict
unique_ordered = list(dict.fromkeys(data))  # [1, 2, 3]