SQL 코드카타_02

수수수수퍼노인·2025년 9월 29일

SQL 코드카타

목록 보기
2/10
post-thumbnail

SQL 코드카타_Symmetric Pairs

SQL 코드카타_Symmetric Pairs

문제 : Symmetric Pairs

# 목적, 목표 : 모든 대칭 쌍을 오름차순으로 출력
# 필요한 컬럼 : X , Y
# 컬럼 조건 : 없음
# 사용할 테이블 : Functions
# join key : 없음
# 테이블 조건 : 두 쌍 (X1 , Y1 )과 (X2 , Y2 )는 X1 = Y2 이고 X2 = Y1 일 때 대칭 쌍, X1 ≤ Y1
# 필요한 그룹 : 없음
# 필요한 그룹 조건 : 없음
# 정렬 기준 : X 기준 오름차순
# 주의사항 : 결과 값은 중복 제거

로직

  • X = Y 제외한 대칭 쌍 추출
    • X = Y가 아닌 경우 → X != Y
    • 대칭 쌍 → (X, Y) = (Y, X)
    • X1 ≤ Y1 필터링 조건 → X1 ≤ Y1
  • X = Y인 대칭 쌍 추출
    • X = Y인 개수가 2개 이상이어야 함
  • 두 테이블 결합 및 X 기준 정렬
WITH A AS (
SELECT X, Y
FROM Functions
WHERE (X, Y) in (SELECT Y, X FROM Functions) and X != Y and X <= Y),
B AS (
SELECT X, Y
FROM Functions
WHERE X = Y
GROUP BY X
HAVING count(X) > 1)

SELECT X, Y
FROM A
UNION
SELECT X, Y
FROM B
ORDER BY X

[쿼리 뜯어보기]

# A 테이블 : X = Y 제외한 대칭 쌍 추출
WITH A AS (
SELECT X, Y
FROM Functions
WHERE (X, Y) in (SELECT Y, X FROM Functions) and X != Y and X <= Y),
# B 테이블 : X = Y인 대칭 쌍 추출
B AS (
SELECT X, Y
FROM Functions
WHERE X = Y
GROUP BY X
HAVING count(X) > 1)
# A와 B 결합 및 X 기준 오름차순 정렬
SELECT X, Y
FROM A
UNION
SELECT X, Y
FROM B
ORDER BY X

[어려웠던 점]

  • 로직을 구성하는 데에 어려움이 있었음
    • LAG를 사용해서 이전 "X = Y의 이전 행(LAG(Y)) and Y = X의 이전 행(LAG(X))"을 생각했음
    • 수많은 시도 끝에.. 대칭 쌍이란 단순히 (X, Y) = (Y, X) 임을 깨닫게 됨

[새로 알게된 점]

  • 대칭 쌍이란 (X, Y) = (Y, X)
profile
화이팅구리

2개의 댓글

comment-user-thumbnail
2025년 9월 29일

고생했시유 수수수퍼노인 🙂‍↕️

답글 달기
comment-user-thumbnail
2025년 9월 29일

뭐가 그렇게 재밌었는가에 대한 회고 요청

답글 달기