개인공부/SQL

[SQL]해커랭크 Symmetric Pairs 문제 풀이

k솔이 2023. 4. 25. 15:06

위와 같은 형태로 데이터를 뽑아내야한다. (2번 )

일단은 X=Y 데이터를 뽑아내는것은 쉽겠다고 생각해서 먼저 작업했다.

 

SELECT X, Y
FROM functions 
WHERE X = Y
GROUP BY X, Y
HAVING COUNT(*) = 2

 

 첫번재 미션 완료.

 

두번째는 조금 어려울거 같다.

일단, 테이블이 한개 더 필요하다고 생각했고 SELF JOIN을 사용했다.

 

 

 

원했던 데이터와 그렇지 못한 데이터가 함께 출력되었다. (X=Y)

조건을 걸어줘야겠다.

 

이상함 감지...... 여기서 정말 많이 고민했다. 하고 나니 어려운 조건이 아닌데, 생각하는데까지 많은 시간이 걸렸다. ㅠㅠ

어떻게 하면 한개의 행이 출력이 될까..?

 

테이블마다 오름차순을 적용해주고 합쳐 버리면 끝이라고 생각했다.

생각해 보니..  나의 생각처럼 합친다면 아래와 같은 형태가 되어버린다. 

 

이 부분에서도.. 많이 헤맸다. 결국 구글링해서 알아냈다.

그냥 제일 마지막에 ORDER BY 를 걸어주면 된다.(참 쉬죠잉~?)

SELECT X, Y
FROM functions 
WHERE X = Y
GROUP BY X, Y
HAVING COUNT(*) = 2

UNION

SELECT A.X, A.Y
FROM functions A
INNER JOIN functions B ON A.X = B.Y AND A.Y = B.X
WHERE A.X < A.Y
ORDER BY X ASC;

 

끝.