626. Exchange Seats(LeetCode)

minllny·2024년 4월 9일

leetcode..조금 실망입니다...
제가 작성한 쿼리에서 논리적으로는 다 맞은 것 같은데
결과는 자꾸 틀리게 나와서 gpt에게 물어보았습니다.


일단 제 답 쿼리입니다.

SELECT id
     , (CASE WHEN (id = (SELECT MAX(id) FROM Seat) AND id % 2 = 1) THEN student
            WHEN id % 2 = 1 THEN LEAD(student) OVER (ORDER BY id)
            WHEN id % 2 = 0 THEN LAG(student) OVER (ORDER BY id)
            END) student
FROM Seat

처음에는 케이스문 첫번째 조건식에서

id = MAX(id)

이런 식으로 썼습니다. gpt가 케이스문에서는 집계함수를 쓸 수 없다고 알려주고 서브쿼리로 고쳐써주더라고요.

그랬더니 정답!..

LeetCode의 실수일까요!
다른 사람의 쿼리도 가져와봤습니다.

SELECT CASE
           WHEN s.id % 2 <> 0 AND s.id = (SELECT COUNT(*) FROM Seat) THEN s.id
           WHEN s.id % 2 = 0 THEN s.id - 1
           ELSE
               s.id + 1
           END AS id,
       student
FROM Seat AS s
ORDER BY id

깔끔하고 신기하네요! 로직이 비슷하면서 다른...ㅋㅋㅋ
저는 student 값을 서로 바꿔주는 로직이라면 이 쿼리는 id를 바꿔주는 로직이라고 할 수 있겠네요. 생각을 못했던 방식이라 그런지 꽤나 헷갈린 ㅎㅎ
id가 그 행까지의 데이터 갯수와 같다는 점을 잘 이용한 쿼리였습니다!!

👏👏👏👏

profile
SQL 끄적끄적

0개의 댓글