오랑우탄의 반란

HackerRank | Symmetric Pairs (MySQL) 본문

SQL/HackerRank

HackerRank | Symmetric Pairs (MySQL)

5&2 2024. 10. 10. 10:44
반응형

 

오늘도 오랑이는 문제를 풉니다.

 

 

Symmetric Pairs

You are given a table, Functions, containing two columns: X and Y.

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.

 

Sample Input

Sample Output

20 20
20 21
22 23

 

 

풀이과정

  • x1 = y2 & x2 = y1 인 행이 2개 이상인 경우
  • x <= y 인 경우 

첫번째 풀이는 셀프조인을 사용한 풀이입니다. 

x1 와 y2, x2 와 y2 를 각각 매칭해줘 셀프 조인을 한 후 행이 2개 이상이거나 y가 x보다 큰 경우에 대해 출력해줍니다. 

select f1.x, f1.y 
from functions f1, functions f2
where f1.x = f2.y and f1.y = f2.x
group by 1,2
having count(f1.x) > 1 or f1.x < f1.y
order by 1

 

 

두번째 풀이는 서브쿼리 if문을 사용한 풀이로 첫번째 쿼리보다 더 효율적입니다. 

functions 테이블에 대해 행마다 x <= y 인 조건을 만족시키면 x, y 를 그대로 두고 그렇지 않은 경우 x, y 를 교체해서 동일하게 만들어주는 방식입니다. 

이때 중복되는 행이 있을 경우 (즉 쌍이 2개 이상인 경우)만 출력해줍니다. 

select x, y
from (select if(x<=y,x,y) as x, if(x<=y,y,x) as y
    from functions) a
group by 1,2
having count(*)>1
order by 1

 

 

 


 

오랑우탄이 영어를 하고 오랑이가 쿼리마스터가 되는 그날까지~

 

 

반응형