문제
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.
해석
주어진 테이블 **Functions**에는 두 개의 컬럼 **X**와 **Y**가 존재한다.
이 테이블에서 **대칭 쌍(Symmetric Pairs)**을 찾아야 한다.
두 개의 쌍 (X1, Y1)과 (X2, Y2)가 대칭 쌍이라고 불리려면, 다음 조건을 만족해야 한다
- X1 = Y2 이고 X2 = Y1 (즉, (X1, Y1)과 (X2, Y2)가 서로 위치를 바꾼 경우)
- 출력되는 (X1, Y1) 값은 X1 ≤ Y1를 만족해야 한다.
- 결과는 X1 기준으로 오름차순 정렬해야 한다.
처음 내가 생각한 답
SELECT DISTINCT LEAST(f1.X, f1.Y) AS X, GREATEST(f1.X, f1.Y) AS Y
FROM Functions f1
JOIN Functions f2
ON f1.X = f2.Y AND f1.Y = f2.X
ORDER BY X;
정답
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
배운 점
- LEAST 함수와 GREATEST 함수에 대해 알게 됨
- x,y가 같은 경우와 다른 경우를 따로 생각하는 방법이 있는 데 같은 경우는 having 절에 count 함수를 사용해서 진행한다.
- 조인의 경우 두가지 조건으로도 진행할 수 있다. f1.x = f2.y and f1.y = f2.x 이 문장은 서로 다른 x, y가 순서가 바뀌는 경우의 행들만 남게 되는 것이다.
'일일 문제 풀이 > HackerRank' 카테고리의 다른 글
[SQL] 해커랭크 HackerRank Interviews 문제 풀이 (0) | 2025.03.19 |
---|---|
[SQL] 해커랭크 HackerRank Placements 문제 풀이 (0) | 2025.03.16 |
[SQL] 해커랭크 HackerRank New Companies 문제 풀이 (0) | 2025.03.15 |
[SQL] 해커랭크 HackerRank Binary Tree Nodes 문제 풀이 (0) | 2025.03.14 |
[SQL] 해커랭크 HackerRank Occupations 문제 풀이 (0) | 2025.03.13 |