본문 바로가기

IT Data 분석

[SQL] Hackerrank Symmetric Pairs

728x90

Two pairs (X1, Y1) and (X2, Y2) are said to be symmetric pairs if X1 = Y2 and X2 = Y1.

Write a query to output all such symmetric pairs in ascending order by the value of X. List the rows such that X1 ≤ Y1.'

 

<조건 정리>

a) X1<=Y1 이어야 한다

b) X1=Y1인 경우에는 (a,a), (a,a) 같은 쌍이 총 두번이 나와야한다. 

c) X1!=Y1인 경우에는 (a,b), (b,a) 가 나와야한다. 

 

c)을 해결하는 방법

=> 1. X1 Y1 Y2 X2의 형태로 조인한다. 이때 X1=Y2, Y1=X2일 때만 조인하는 것으로 inner join 을 사용해야한다. 

=> 즉, X,Y 리스트에서 (a,b), (b,a) 두 쌍이 다 존재할때만 보여주는 조건이 된다. 

SELECT *
FROM Functions F1
inner join Functions F2
On F1.X=F2.Y and F1.Y=F2.X
order by 1 asc

a), b)를 해결하는 방법

=> a) 를 위해 having F1.X<F1.Y 

=> b) 를 위해 count(*) >1 

=> 두 조건은 or로 처리해야한다. 

SELECT *
FROM Functions F1
inner join Functions F2
On F1.X=F2.Y and F1.Y=F2.X
group by F1.X, F1.Y
having F1.X<F1.Y or count(*)>1
order by 1 asc

 

 

최종코드

 

SELECT F1.X,F1.Y 
FROM Functions F1
inner join Functions F2
On F1.X=F2.Y and F1.Y=F2.X
Group by F1.X,F1.Y 
Having count(F1.X)>1 or F1.X<F1.Y 
order by F1.X