https://www.hackerrank.com/challenges/symmetric-pairs/problem?isFullScreen=true
Column | Type |
X | Integer |
Y | Integer |
Functions 테이블:
- X, Y : 테이블의 두개의 열
두 개의 열 X와 Y가 있습니다.
(X1, Y1)과 (X2, Y2) 두 쌍이 X1 = Y2이고 X2 = Y1일 때 대칭 쌍이라고 합니다.
모든 대칭 쌍을 X 값 기준으로 오름차순으로 출력하는 쿼리를 작성하세요. X1 ≤ Y1인 행만 나열하세요.
select *,
row_number() over () r
from Functions
각 행에 번호를 붙여서 출력한다. 각 행을 자기자신의 다른 모든 행들과 비교하기 위함이다.
select *
from
(select *,
row_number() over () r
from Functions) f1
left join (select *,
row_number() over () r
from Functions) f2 on f1.r <> f2.r
자기 자신에 행 번호를 붙여서 행 번호가 다른 행을 기준으로 결합한다. 자기 자신과의 결함을 방지하기 위함이다.
select *
from
(select *,
row_number() over () r
from Functions) f1
left join (select *,
row_number() over () r
from Functions) f2 on f1.r <> f2.r
where
f1.X = f2.Y and
f2.X = f1.Y and
f1.X <= f1.Y
where문에 조건을 작성해준다. 대칭 쌍을 구하기 위해서 X1 = Y2이고 X2 = Y1인 조건을 작성하고 X1 ≤ Y1인 행만 나열하기 위해 추가적으로 조건을 작성한다.
select
distinct f1.X,
f1.Y
from
(select *,
row_number() over () r
from Functions) f1
left join (select *,
row_number() over () r
from Functions) f2 on f1.r <> f2.r
where
f1.X = f2.Y and
f2.X = f1.Y and
f1.X <= f1.Y
order by f1.X
X에 대해서 정렬한 후, X와 Y를 X에서 중복제거 하여 출력하면 완료!
아직까지는 비슷한 문제가 나왔을 때 같은 논리를 적용할 자신이 없다..
'코딩일기' 카테고리의 다른 글
SQL 코드카타 180 - 15 Days of Learning SQL (0) | 2024.08.02 |
---|---|
SQL 코드카타 179 - Interviews (0) | 2024.07.31 |
알고리즘 코드카타 120 - 멀쩡한 사각형 (0) | 2024.07.29 |
SQL 코드카타 177 - Placements (0) | 2024.07.29 |
알고리즘 코드카타 119 - 숫자 카드 나누기 (0) | 2024.07.28 |