distinct on
может это сделать. Я думаю, вы хотите:
select distinct on (id, trial_id) *
from tbl
where name_split in (digest_part_matched, normalized_name)
order by
id,
trial_id,
(name_split = digest_part_matched) desc
Третье выражение в предложении order by
придает приоритет строкам, где name_split
соответствует digest_part_matched
.
Вы не указываете, что делать с кортежами (id, trial_id)
, в которых ни один из двух столбцов не соответствует name_split
. Вышеупомянутый запрос просто устранит их. Запрос можно легко адаптировать для сохранения одной строки для каждой такой группы строк, при условии, что у вас есть другие критерии, чтобы решить, какая строка должна быть сохранена:
select distinct on (id, trial_id) *
from tbl
order by
id,
trial_id,
(name_split = digest_part_matched) desc,
(name_split = normalized_name) desc,
-- another criteria here