1 заметка с тегом

double row

Найти все дублированные строки в PostgreSQL

Допустим задача: найти дубли не просто по одному полю, а сразу по нескольким полям. Например, в таблице есть поля user_id и link

id name user_id link
1 Первая запись 226 яндекс.ру
2 Вторая запись 67 гугл.ру
3 Третья запись 315 рамблер.ру
... ... ... ...
3116 Последняя запись 226 яндекс.ру

и необходимо найти все дубли, чтобы совпадали поля user_id и link. В нашем случае, это строки под id=1 и id=3116.
Можно применить следующий sql:

SELECT user_id, link, string_agg(CAST(id AS TEXT), ', ') AS ids, count(user_id) AS count
FROM our_table
GROUP BY user_id, link
HAVING count(user_id) > 1
ORDER BY user_id DESC;

Строка string_agg(CAST(id AS TEXT), ', ') AS ids необходима для того, чтобы конкатенировать id дублированных строк

12 сентября   double row   PostgreSQL