최대 1 분 소요

문제 링크

정답

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;