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
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 |
댓글 영역