[SQL Runday] HackerRank - Symmetric Pairs


各X、Yには値のテーブル関数があります.
  • X 1=Y 2、X 2=Y 1の条件が満たされると(X 1、Y 1)、(X 2、Y 2)両値が対称になる.(Symmetric pairs)
  • 対称ペアのクエリーをすべて書き出します.
  • X値を基準に昇順で並べ替えます.
  • クエリ
  • X 1<=Y 1の値のみ.
  • Table



    以下のX、Y値のテーブル機能があります.

    Key points

  • 1、10、10、1<このような対称的なペアを見つけなければならない.
  • 出力は1、10<ペアのみ.
  • まずX 1=Y 2の2つの値を基準にJoinを行う考え.
  • where条件もあり、X 2=Y 1を満たす行のみを検索し、f.X<=f.Y条件を追加すればよい
  • Errors

  • そして問題が発生し、どうせ同じテーブルなので、自分と同じ行でも対称対のように調べられました.
  • 2値を持つ行は2 2 2に問い合わせることができる.
  • 2の値を持っていれば、自分の他の行ではなく2、2が対称対です.
  • この問題を解決するためにrow_indexテーブルごとに変数を作成した.
  • 全題もそうしているのですが、どうしたらいいのかわかりません.
  • でも最後は1313<2回撮られた
  • 照会
  • distinct一度だけ.
  • これが正しい方法かどうかは不明です.他の人がどのように解決したのか議論すべきかもしれません.
  • 最終クエリー

    set @index = 0;
    set @index1 = 0;
    select distinct f.X, f.Y
    from (select X, Y, @index:= @index+1 as row_index from functions)f
    inner join(select X, Y, @index1:= @index1+1 as row_index1 from functions)f1
    on f.X = f1.Y
    where f.Y = f1.X and f.X <= f.Y and row_index != row_index1
    order by f.X