https://leetcode.com/problems/exchange-seats/?envType=study-plan-v2&envId=top-sql-50
SELECT a.id,
CASE
WHEN a.id % 2 = 1 THEN b.student
ELSE c.student END
AS student
FROM seat a
LEFT JOIN seat b ON a.id + 1 = b.id
LEFT JOIN seat c ON a.id = c.id + 1
id가 홀수인 경우와 짝수인 경우를 나눠서 문제를 해결하려고 했는데 table의 마지막 열에 대해서 어떻게 처리가 안되더라 ..
원래 table은 다음과 같다.
SELECT
CASE
WHEN id = (SELECT MAX(id) FROM seat) AND id % 2 = 1 THEN id -- MAX가 홀수열인 경우 id
WHEN id % 2 = 1 THEN id + 1 -- 홀수열은 다음 id
ELSE id - 1 -- 짝수열은 이전 id
END AS id,
student
FROM seat
id만 뽑아보면 다음과 같다.
name은 원래 있던 순서대로 나온다.
id가 이 name들이 가야할 위치 index 역할을 한다고 생각하면 될듯?
그래서 이제 id로 ORDER BY 해줘야 한다.
종합하면 다음과 같다.
원래 테이블은 이렇게 생겼고
다음 쿼리가 정답쿼리이다.
SELECT
CASE
WHEN id = (SELECT MAX(id) FROM seat) AND id % 2 = 1 THEN id -- MAX가 홀수열인 경우 id
WHEN id % 2 = 1 THEN id + 1 -- 홀수열은 다음 id
ELSE id - 1 -- 짝수열은 이전 id
END AS id,
student
FROM seat
ORDER BY id
'SQL > 문제풀이' 카테고리의 다른 글
[LeetCode] Consecutive Numbers / N가지 풀이 (0) | 2024.05.08 |
---|---|
[LeetCode] investments-in-2016 📌 (0) | 2024.03.26 |
[LeetCode] last-person-to-fit-in-the-bus 📌 (0) | 2024.03.20 |
[LeetCode] count-salary-categories (0) | 2024.03.09 |
[LeetCode] product-price-at-a-given-date 📌 (0) | 2024.03.09 |