SQL устраняет повторяющиеся строки на основе двух столбцов

Попытка написать запрос Presto, чтобы исключить то, что я считаю повторяющимися записями. Вот упрощенная версия моей таблицы:

На самом деле не имеет значения, сохраняю ли я пару (AA, BB) или (BB, AA), для этой цели они одинаковы. Фактические значения представляют собой полуслучайные строки.

Я пробовал несколько подходов, таких как попытка НЕ ​​СУЩЕСТВУЕТ и разные СОЕДИНЕНИЯ, но в итоге они удаляют строки (AA, BB) и (BB, AA).

1 ответ

Один из способов - использовать оконные функции:

      select a, b, c
from (select t.*,
             row_number() over (partition by least(a, b), greatest(a, b), c order by c) as seqnum
      from t
     ) t
where seqnum = 1;

Другой метод использовал бы not exists:

      select t.*
from t
where a < b or
      not exists (select 1
                  from t t2
                  where t2.c = t.c and
                        t2.b = t.a and
                        t2.a = t.b
                 );

Честно говоря, я не знаю, какой из них лучше работает на Presto.

Другие вопросы по тегам