Это сложный вопрос.Я предполагаю, что при наличии пары вы хотите сохранить порядок пары с более высокой суммой:
with cc as (
select column1, column2, sum(column3) as sum_column3
from t
group by column1, column2
)
select (case when cc2.sum_column3 > cc.sum_column3 then cc2.column1 else cc.column1 end) as column1,
(case when cc2.sum_column3 > cc.sum_column3 then cc2.column2 else cc.column2 end) as column2,
(cc.sum_column3 + coalesce(cc2.sum_column3, 0)) as sum_column3
from cc left join
cc cc2
on cc.column1 = cc2.column2 and cc.column2 = cc2.column
where cc2.column1 is null or (cc.column1 < cc.column2); -- keep only one row of pairs
Итак, этот запрос начинается с суммирования данных.Затем он проверяет, есть ли в данных «обратный» ряд.Если это так, он выбирает столбцы на основе более распространенного порядка.