
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가 그 행까지의 데이터 갯수와 같다는 점을 잘 이용한 쿼리였습니다!!
👏👏👏👏