반응형
문제
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.
문제 요약
연속된 seatid인 학생들의 자리를 바꿔라
학생 수가 홀수면, 마지막 학생은 바꾸지 않는다.
id 기준 오름차순 정렬해 추출하라
풀이
1. id가 짝수면 -1, 홀수면 +1 부여
2. 학생 수가 홀수면, 마지막 홀수id에 1 더해진 id값에 부여되는 이름은 null
3. CASE WHEN THEN 서브쿼리 사용
WITH t AS(SELECT *
, CASE WHEN MOD(id,2)=1 THEN id+1 ELSE id-1
END AS s_id
FROM seat)
SELECT t.id
, CASE WHEN s.student IS NULL THEN
(SELECT student
FROM seat
ORDER BY id DESC
LIMIT 1)
ELSE s.student
END AS student
FROM t
LEFT JOIN seat s
ON t.s_id = s.id
배운 점
CASE WHEN THEN 서브쿼리
CASE WHEN 칼럼 IS NULL THEN
(SELECT 절)
ELSE '대체 값'
END AS 칼럼이름
: 칼럼이 null이면 해당 값을 대체할 수 있는 문자나 서브 쿼리를 사용할 수 있다.
반응형