티스토리 뷰

728x90

You are given a table, Functions, containing two columns: 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 F1.X, F1.Y
FROM Functions F1
    JOIN Functions F2
    ON (F1.X = F2.Y AND F1.Y = F2.X)
GROUP BY F1.X, F1.Y
HAVING COUNT(F1.X) > 1
    OR F1.X < F1.Y
ORDER BY F1.X;

 

또 문제 이해를 못했나보다....; 그런데 아무리 봐도 잘 모르겠다...;;

나는 아래처럼 WHERE 구문에서 F1.X <= F1.Y 로 했더니 샘플 결과와 동일하게 나왔다. 그런데 오답이었다..

다른 블로그를 좀 찾아보니 X=Y인 경우에는 같은 데이터가 하나씩 더 있어야 한다고 한다.

즉, 샘플에서 (20,20) row가 2개 있는데 만약 1개 였다면 데이터가 나오지 않아야 한다고 한다. 왜?

구문이 어려운게 아니고 정말 문제 이해를 못하겠다....ㅠ

TRUNCATE TABLE #Functions

CREATE TABLE #Functions	 (
	X INT,
	Y INT
)

INSERT INTO #Functions
VALUES (20,20)
--	, (20,20)
	, (20,21)
	, (23,22)
	, (22,23)
	, (21,20)


X1 = Y2 및 X2 = Y1인 경우 두 쌍(X1, Y1)과 (X2, Y2)를 대칭 쌍이라고 합니다.	
모든 대칭 쌍을 X 값만큼 오름차순으로 출력하는 쿼리를 작성하십시오. X1 ≤ Y1이 되도록 행을 나열하십시오.	

SELECT F1.X, F1.Y
FROM #Functions F1
    JOIN #Functions F2
    ON (F1.X = F2.Y AND F1.Y = F2.X)
WHERE F1.X <= F1.Y
GROUP BY F1.X, F1.Y
ORDER BY F1.X

/*
X	Y
20	20
20	21
22	23
*/


SELECT F1.X, F1.Y
FROM #Functions F1
    JOIN #Functions F2
    ON (F1.X = F2.Y AND F1.Y = F2.X)
GROUP BY F1.X, F1.Y
HAVING COUNT(F1.X) > 1 
	OR F1.X < F1.Y
ORDER BY F1.X

/*
X	Y
20	21
22	23
*/

 

728x90
LIST

'Programming > MySQL' 카테고리의 다른 글

[MySQL/Hackerrank] Draw The Triangle 1  (0) 2021.11.07
[MySQL/Hackerrank] Interviews  (0) 2021.11.07
[MySQL/Hackerrank] Placements  (0) 2021.11.06
[MySQL/Hackerrank] SQL Project Planning  (0) 2021.11.06
[MySQL/Hackerrank] Contest Leaderboard  (0) 2021.11.04
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함