Programing Language/SQL

해커랭크 Symmetric Pairs (셀프 JOIN, 조건)

Data-SSung 2025. 6. 16. 15:32
반응형

https://www.hackerrank.com/challenges/symmetric-pairs/problem

 

Symmetric Pairs | HackerRank

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

www.hackerrank.com


문제 정의 (영어 -> 한국어 번역 후 문제 파악하기)

 

  Y라는 두 개의 열이 포함된 함수 테이블이 주어졌습니다 .

두 쌍 (X 1 , Y 1 )  (X 2 , Y 2 ) 는 X 1 = Y 2 이고 X 2 = Y 1 일 때  대칭  이라고 합니다 .

X 값을 기준으로 모든 대칭 쌍을 오름차순으로 출력하는 쿼리를 작성하세요 . X 1 ≤ Y 1 이 되는 행을 나열하세요 .

 

문제 접근

  • X 값을 기준으로 모든 대칭 쌍을 오름차순으로 출력하는 쿼리
  • 조건
    • X 1 = Y 2 이고 X 2 = Y 1
    • X 1 ≤ Y 1 이 되는 행
    • X1기준 내림차순
  • 접근
    • x=y : 동일한 쌍 2개 이상
    • x<> y : 로직에 충실하되, 중복 제거
      • X 1 = Y 2 이고 X 2 = Y 1
      • X 1 ≤ Y 1 이 되는 행

/*
-- X 값을 기준으로 모든 대칭 쌍을 오름차순으로 출력하는 쿼리
-- 조건
	-- X 1 = Y 2 이고 X 2 = Y 1
	-- X 1 ≤ Y 1 이 되는 행
	-- X1기준 내림차순
ex) 
x,y
20,20
20,20
20,21
23,22
22,23
21,20

symetric 
20,20
20,20

23,22
22,23

20,21
21,20
*/

sql-- 수정된 코드
select distinct a.x, a.y
from (
    -- x <> y (서로 다른 대칭 쌍)
    select a.x, a.y
    from Functions a
    inner join Functions b  -- innner → inner
        on a.x = b.y 
            and a.y = b.x
            and a.x < a.y  -- b.y → a.y
	
    union all
    -- x = y (같은 값이 2개 이상 있는 경우)        
    select x, y
    from Functions
    where x = y
    group by x, y
    having count(*) >= 2
) a
order by a.x  -- x → a.x
반응형