(리트코드) 626. Exchange seats

chaechae·2024년 2월 12일
0

코딩테스트(SQL) 

목록 보기
18/22
post-thumbnail

문제

연속된 두 학생의 좌석 ID를 교환하는 쿼리를 작성하는 문제입니다! (학생수가 홀수인 경우, 마지막 학생은 바뀌지 않음)
Write a solution to swap the seat id of every two consecutive students. If the number of students is odd, the id of the last student is not swapped. Return the result table ordered by id in ascending order.

code

SELECT CASE WHEN mod(id,2) = 1 AND id = (SELECT max(id) FROM Seat) THEN id # CASE 1
            WHEN mod(id,2) = 0 THEN id - 1 # CASE 2
            ELSE id + 1 # CASE 3
            END AS id , student
FROM Seat
ORDER BY id

CASE WHENmod() 를 이용하여 ID 조건을 차례대로 적용했습니다. 조건을 하나씩 설명해보면

CASE1

ID가 홀수이고 가장 마지막 ID를 갖는 학생의 경우 그대로 ID를 둡니다. 위 테이블의 경우 홀수이고, 가장 마지막 ID 인 5번 학생의 경우 입니다.

왜 이조건을 먼저 두어야하나!?

  • CASE WHEN 의 경우 첫번째 조건절 부터 적용이되기 때문에 가장 까다로운(?) 조건을 먼저 써줘야합니다 ㅎㅎ 앞으로 나올 조건에 덮혀씌우지 않도록요
  • mod() ? 나머지를 구하는 함수입니다. 위함수를 이용해서 짝수, 홀수 ID를 구분합니다.
IDAFTER
1
2
3
4
55

CASE2 적용시

ID가 짝수인 경우 해당 ID 값에서 1을 빼줍니다 (ID가 짝수인 경우 1을 빼줘서 그 직전의 홀수값 ID로 만드는 아이디어)

IDAFTER
1
21
3
43
55

CASE3 적용시

그리고 자동적으로 남게 되는 나머지 홀수 ID는 반대로 +1 하여 그 다음 짝수ID로 바꿔줍니다

IDAFTER
12
21
34
43
55

위 조건으로 나열된 AFTER(ID) 순으로 , ID와 STUDENT를 가져오면 끝!

profile
게임 혹은 다양한 컨텐츠가 있는 곳을 좋아합니다. 시리즈를 참고하시면 편하게 글을 보실 수 있습니다🫠

0개의 댓글