«первый» не очень хорошо определен в SQL. Но вы можете оставить одно из имен, например, первое в алфавитном порядке:
delete from musician_groups mg
where mg.name > (select max(mg2.name)
from musician_groups mg2
where mg2.title = mg.title
);
Если у вас есть столбец id
или другой способ выбрать строку, которую вы хотите сохранить, то вы можете использовать это .
Если у вас большая таблица, удаление большого количества строк обходится дорого. Часто самым быстрым способом является повторная вставка в таблицу:
create table temp_musician_groups as
select distinct on (title) mg.*
from musician_groups mg
order by title, name;
truncate table musician_groups; -- back up the table first!
insert into musician_groups
select *
from temp_musician_groups;