오랑우탄의 반란
HackerRank | Symmetric Pairs (MySQL) 본문
반응형
오늘도 오랑이는 문제를 풉니다.
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
오랑우탄이 영어를 하고 오랑이가 쿼리마스터가 되는 그날까지~
반응형
'SQL > HackerRank' 카테고리의 다른 글
HackerRank | SQL Project Planning (MySQL) (2) | 2024.10.02 |
---|---|
HackerRank | Weather Observation Station 20 (MySQL) 중앙값 percent_rank (2) | 2024.09.26 |