하루에 하나씩 공부하기
[해커랭크-Advanced Join] Symmetric Pairs 본문
- 문제
X1=Y2, X2=Y1인 순서쌍 찾기
- 키포인트
X1=Y1인 경우, 테이블에 같은 쌍이 한개여도 출력 >> 이를 어떻게 처리해야 할까
- 쿼리
SELECT F.X, F.Y
FROM FUNCTIONS F JOIN FUNCTIONS S
ON F.X=S.Y AND F.Y=S.X
WHERE F.X<F.Y OR (F.X=F.Y AND (SELECT COUNT(*)
FROM FUNCTIONS
WHERE X=F.X AND Y=F.Y)=2
)
GROUP BY F.X, F.Y
ORDER BY F.X ASC;
F.X=F.Y인 경우 순서쌍을 카운트 해 2개일 경우만 출력하도록 WHERE절에 추가
- 다른 풀이
SELECT x, y
FROM functions
WHERE x = y
GROUP BY x, y
HAVING COUNT(*) = 2
UNION
SELECT f1.x, f1.y
FROM functions AS f1
INNER JOIN functions AS f2 ON f1.x = f2.y AND f1.y = f2.x
WHERE f1.x < f1.y
ORDER BY x
아예 따로 출력하고 UNION