출처
문제
두 명의 연속된 학생마다 좌석 ID를 바꾸는 솔루션을 작성합니다. 학생 수가 홀수인 경우 마지막 학생의 ID가 바뀌지 않습니다.
문제에 대한 해석
![]() |
![]() |
마지막 번호가 홀수인 5번 학생을 제외하고 1번 2번이 바뀌었다
풀이(MYSQL)
with base as (
select id,
case when (select max(id) from Seat) = id and id % 2 > 0 then id
-- 마지막 아이디가 홀수라면 그냥 id를 출력하고 그 외
when id % 2 = 0 then id-1 -- 아이디가 짝수이면 이전번호를
else id+1 end as'swap' -- 아니면(홀수이면) 이후 번호를
from Seat
)
select a.swap as 'id', b.student
from base a join Seat b
on a.id = b.id
order by 1
select id,
case when id%2 =0 then lag(student) over(order by id)
-- id가 짝수라면 이전행의 이름을 가져와라(id순으로)
else ifnull(lead(student) over(order by id),student)
-- id가 홀수라면 다음행의 이름을 가져와라(마지막 행이라서 다음행을 가져올 수 없어 null값이라면 그냥 이름을 출력)
end as 'student'
from Seat
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] Leet code - Product Sales Analysis III (0) | 2024.08.01 |
---|---|
[문제풀이] Leet code - Customers Who Bought All Products (0) | 2024.07.31 |
[문제풀이] Leet code - Friend Requests II: Who Has the Most Friends (0) | 2024.07.24 |
[문제풀이] Leet code - Average Selling Price (4) | 2024.07.23 |
[문제풀이] Leet code - Monthly Transactions I (1) | 2024.07.23 |