[Leetcode] Exchange Seats
정답
SELECT
id,
CASE
WHEN id % 2 = 1 AND LEAD(id) OVER (ORDER BY id) IS NOT NULL THEN LEAD(student) OVER (ORDER BY id)
WHEN id % 2 = 1 AND LEAD(id) OVER (ORDER BY id) IS NULL THEN student
WHEN id % 2 = 0 THEN LAG(student) OVER (ORDER BY id)
END as student
FROM Seat
ORDER BY id;
✅ Point
- id를 기준으로 이전 행 / 다음 행 / 현재 행의 student name 가져오기
LAG
: 이전 행 가져오기,LEAD
: 다음 행 가져오기- 홀수 행 & 마지막 행이 아닐 땐, 다음 행 가져오기
- 홀수 행 & 마지막 행일땐, 현재 행 가져오기
- 짝수 행일 땐, 이전 행 가져오기
다른 풀이
- id를 기준으로 id 값 갱신하기 > 갱신된 id 값에 해당하는 student name 가져오기
- id 가 PRIMARY KEY 이므로 가능
SELECT CASE WHEN id % 2 = 1 AND id + 1 in (SELECT id From Seat) THEN id + 1 WHEN id % 2 = 0 THEN id - 1 ELSE id END as id, student FROM Seat ORDER BY id;
- id 가 PRIMARY KEY 이므로 가능