본문 바로가기

Algorithm/MySQL

[해커랭크(HackerRank)] Symmetric Pairs (MySQL)

문제

ou 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.

코드

# X와 Y가 같지 않은 것과 같은 것을 UNION으로 묶어서 보여주기
# X와 Y가 같지 않을 때
SELECT A.X, A.Y
FROM Functions A
    INNER JOIN Functions B ON A.X = B.Y AND B.X = A.Y
WHERE A.X < A.Y

UNION

# X와 Y가 같을 떄
SELECT X, Y
FROM Functions
WHERE X = Y
GROUP BY X, Y
HAVING COUNT(X) = 2
ORDER BY X
  1. Functions 테이블 사용
  2. 대칭이 되는 두 쌍인 데이터를 구하는 문제
  3. (x1, y1) (x2, y2) <-이렇게 두 쌍이 필요하기 때문에 self join
  4. X1 = Y2 and X2 = Y1
  5. X1 <= Y1  그 중에서도 x가 y보다 작은 값만 출력하겠다
  6. 순서 나열은 X 값의 오름차순으로 정렬

출처

반응형