Функция очистки таблицы от повторяющихся значений в колонке value

Оставьте строку с минимальным id для каждого value, а остальные удалите по рангу внутри группы. Перед удалением проверьте выборку и выполняйте операцию в контролируемой транзакции.

Короткий ответ

Что ответить на собеседовании

Оставьте строку с минимальным id для каждого value, а остальные удалите по рангу внутри группы. Перед удалением проверьте выборку и выполняйте операцию в контролируемой транзакции.

Подробный разбор

Ответ с пояснениями

Условие

В базе имеется таблица с двумя столбцами: id – автоинкрементный уникальный идентификатор и value – числовое поле, в котором могут встречаться одинаковые числа. Требуется реализовать функцию, которая удалит все дублирующиеся записи, оставив только одну строку для каждого уникального значения value.

Пример исходных данных:

T id | value

1 | 1 2 | 2 3 | 2 4 | 3 5 | 3 6 | 3

Ответ

Оставьте строку с минимальным id для каждого value, а остальные удалите по рангу внутри группы. Перед удалением проверьте выборку и выполняйте операцию в контролируемой транзакции.

Пример для PostgreSQL:

WITH ranked AS (
  SELECT id,
         ROW_NUMBER() OVER (PARTITION BY value ORDER BY id) AS rn
  FROM T
)
DELETE FROM T
USING ranked r
WHERE T.id = r.id AND r.rn > 1;

В примере останутся id 1, 2, 4. Перед DELETE тот же CTE можно использовать с SELECT для проверки. Параллельные записи требуют согласованной блокировки или миграционного режима, после очистки — уникального ограничения с нужной семантикой NULL. Для большой таблицы полезно удалять ограниченными партиями.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее