본문 바로가기

코딩일기

SQL 코드카타 114 - Exchange Seats

https://leetcode.com/problems/exchange-seats/description/

 

Column Name Type
id int
student varchar

 

Seat 테이블:

  • id : 테이블의 고유 키
  • student : 학생의 이름

두 명의 연속된 학생들의 좌석 id를 서로 교환하는 솔루션을 작성하세요. 학생 수가 홀수인 경우, 마지막 학생의 id는 교환되지 않습니다.

결과 테이블은 id가 오름차순으로 정렬되어 있어야 합니다.

 

select
    id,
    student,
    case
        when id % 2 <> 0 then lead(student) OVER (ORDER BY id)
        else lag(student) OVER (ORDER BY id)
    end student
from Seat

 

id가 홀수일 경우 lead, 짝수일 경우 lag를 사용해서 각각 아래쪽과 위쪽의 데이터를 새로운 열로 추가한다.

 

select
    id,
    student,
    COALESCE(case
        when id % 2 <> 0 then lead(student) OVER (ORDER BY id)
        else lag(student) OVER (ORDER BY id)
    end, student) student
from Seat

 

coalesce를 사용해서 값이 null일 경우(데이터의 총 합계가 홀수라서 마지막 행이 교환할 데이터가 없을 경우) 자신의 값을 그대로 출력하도록 한다.

 

select
    id,
    COALESCE(case
        when id % 2 <> 0 then lead(student) OVER (ORDER BY id)
        else lag(student) OVER (ORDER BY id)
    end, student) student
from Seat

 

마지막으로 불필요한 데이터를 select에서 제거해주면 성공!

완료!