해커랭크의 Symmetric Pairs 문제에 대한 정리를 해보고자 합니다.
해결하는데 시간을 많이 쏟았지만 결국 스스로 풀지 못하고 여러 블로그를 참고한 끝에 이해한 문제입니다..
우선 쿼리문을 작성하기 전에 테이블을 보며 문제를 이해해봅시다.

[테이블명: Functions]
해당 문제에서 활용할 Functions 테이블은 X, Y 두 개의 컬럼으로 구성되어 있습니다.
symmetric pairs(X1, Y1) (X2, Y2)는 X1 = Y2 그리고 X2 = Y1 인 두 항을 의미합니다.

예를 들어, 위의 표에서 조건에 만족하는 순서쌍은 (20,20)(20,20) (20,21)(21,20) (23,22)(22,23) 으로 총 3가지!
테이블에 대해 어느 정도 파악이 되었으니, 구하고자 하는 문제가 무엇인지 살펴봅시다.
' X컬럼을 기준으로 오름차순 정렬한 symmetric pairs에서
X <= Y 인 하나의 행만 출력하기 '

1) symmetric pairs 형태를 만들기 위해 Self Join을 합니다.
(조인까지는 진행했지만 그 다음부터는 생각해내기 어려웠어요 ....)
2) GROUP BY로 출력값의 중복을 제거합니다.
3) HAVING절에 f1.X <= f1.Y 를 만족하는 조건을 작성합니다.
이때, 두 가지 경우로 나누어볼 수 있습니다.
f1.X = f1.Y인 경우
쌍을 기준으로 생각했을 때, 두 수가 같으면 COUNT한 값이 1보다 크기 때문에 COUNT(f1.X) > 1 로 작성합니다.
(COUNT(*) > 1 도 가능)
f1.X < f1.Y인 경우
두 가지 조건을 OR(또는)로 연결해줍니다.
4) f1.X를 기준으로 오름차순 정렬을 해줍니다.
검색해보니 UNION을 이용해 쿼리문을 작성하는 방법도 있던데, 나중에 그렇게도 한번 풀어보면 좋을 것 같네요!
https://www.hackerrank.com/challenges/symmetric-pairs/problem?isFullScreen=true