>> 문제
=> (x,y)의 좌표들이 행으로 주어짐
=> (x.y) 를 뒤집은 (y.x)가 행에 존재하면 그 행을 출력하라는 문제
>>입력 예시
>> (20, 20) 은 (20, 20)과 대응
>> (20, 21) 은 (21, 20)과 대응
>> (22, 23) 은 (23, 22)와 대응
=> 여기서 20, 20이 서로 같아도 행이 두 개여야 인정됨
=> 즉, x,y가 같은 x,x가 한 행만 존재한다면 출력하면 안된다.
>> 내가 푼 풀이
먼저 경우를 2가지로 구분하였다.
case1 ) x==y 일 때
=> 만약 같은 행이 하나 더 존재하면 출력해야 함
ex)
(20,20) 이 하나만 있다면 -> 대응되는 행이 없으므로 출력x
(20,20) 이 하나 이상 있다면 -> 대응되는 행이 있으므로 출력o
case2 ) x <> y 일 때
=> (y,x)가 존재하면 출력해야 함
ex) (20,21) => (21,20)이 존재하면 출력
=> 제출 코드
=> 이 논리를 압축시킨 다른 사람의 코드
SELECT f1.X, f1.Y
FROM Functions f1
JOIN Functions f2
ON f1.Y=f2.X AND f1.X=f2.Y
WHERE f1.X <= f1.Y => (x,y) / (y,x)가 존재
GROUP BY f1.X, f1.Y => x,y로 그룹화
HAVING COUNT(*)>1 OR f1.X<>f1.Y => x,y가 다르거나 / 같은 행이 두개 이상 존재하면 출력
ORDER BY f1.X, f1.Y
'데이터 분석 > SQL' 카테고리의 다른 글
[스크랩 ] MYSQL - DECODE함수 (1) | 2023.04.24 |
---|---|
[MYSQL] SQL Project Planning / 2가지 풀이 (0) | 2023.04.24 |
[MYSQL] Draw the Triangle / 프로시저로 for문 구현 (0) | 2023.04.22 |
[MYSQL] New Companies / 계층구조의 외래키 설정 (1) | 2023.04.17 |
[MYSQL] 자동차 대여 기록별 대여 금액 구하기 (0) | 2023.04.07 |