상세 컨텐츠

본문 제목

Symmetric Pairs(HackerRank)

SQL/MySQL 문제풀이

by 관재탑 2022. 7. 20. 16:40

본문

https://www.hackerrank.com/challenges/symmetric-pairs/problem?isFullScreen=true 

 

Symmetric Pairs | HackerRank

Write a query to output all symmetric pairs in ascending order by the value of X.

www.hackerrank.com

 

 

문제

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

 

 

정답쿼리

SELECT X, Y
FROM Functions 
WHERE X = Y
GROUP BY X
HAVING COUNT(*) >= 2
UNION
SELECT f1.X, f1.Y
FROM Functions f1
INNER JOIN Functions f2 ON f1.X = f2.Y
WHERE f1.Y = f2.X AND f1.X <> f2.X 
ORDER BY X 
LIMIT 8
2 24
4 22
5 21
6 20
8 18
9 17
11 15
13 13

 

 

해설

X = Y인 데이터가 2개일 때와 X1=Y2, X2=Y1인 경우 2가지로 나누어서 구해보자

X = Y인 데이터가 2개일 때는 아래의 쿼리문으로 구한다.

SELECT X, Y
FROM Functions 
WHERE X = Y
GROUP BY X
HAVING COUNT(*) >= 2
UNION

 

X1=Y2, X2=Y1인 경우는 아래의 쿼리문으로 구한다.

UNION으로 위의 커리문과 합해준다.

ORDER BY X로 UNION으로 묶인 두 데이터를 모두 정렬한다.

LIMIT 8로 중복되는 데이터를 잘라준다.

SELECT f1.X, f1.Y
FROM Functions f1
INNER JOIN Functions f2 ON f1.X = f2.Y
WHERE f1.Y = f2.X AND f1.X <> f2.X 
ORDER BY X 
LIMIT 8

 

이렇게도 풀 수 있다.

SELECT X, Y
FROM Functions 
WHERE X = Y
GROUP BY X, Y
HAVING COUNT(*) = 2
UNION
SELECT f1.X, f1.Y
FROM Functions f1
INNER JOIN Functions f2 ON f1.X = f2.Y AND f1.Y = f2.X
WHERE f1.X < f1.Y
ORDER BY X

 

'SQL > MySQL 문제풀이' 카테고리의 다른 글

Swap Salary(LeetCode)  (0) 2022.08.02
Duplicate Emails(LeetCode)  (0) 2022.07.30
Rising Temperature(LeetCode)  (0) 2022.07.20
Employees Earning More Than Their Managers(LeetCode)  (0) 2022.07.20
Customers Who Never Order(LeetCode)  (0) 2022.07.20

관련글 더보기

댓글 영역