https://leetcode.com/problems/exchange-seats/description/
Column Name | Type |
id | int |
student | varchar |
Seat 테이블:
- id : 테이블의 고유 키
- student : 학생의 이름
두 명의 연속된 학생들의 좌석 id를 서로 교환하는 솔루션을 작성하세요. 학생 수가 홀수인 경우, 마지막 학생의 id는 교환되지 않습니다.
결과 테이블은 id가 오름차순으로 정렬되어 있어야 합니다.
select
id,
student,
case
when id % 2 <> 0 then lead(student) OVER (ORDER BY id)
else lag(student) OVER (ORDER BY id)
end student
from Seat
id가 홀수일 경우 lead, 짝수일 경우 lag를 사용해서 각각 아래쪽과 위쪽의 데이터를 새로운 열로 추가한다.
select
id,
student,
COALESCE(case
when id % 2 <> 0 then lead(student) OVER (ORDER BY id)
else lag(student) OVER (ORDER BY id)
end, student) student
from Seat
coalesce를 사용해서 값이 null일 경우(데이터의 총 합계가 홀수라서 마지막 행이 교환할 데이터가 없을 경우) 자신의 값을 그대로 출력하도록 한다.
select
id,
COALESCE(case
when id % 2 <> 0 then lead(student) OVER (ORDER BY id)
else lag(student) OVER (ORDER BY id)
end, student) student
from Seat
마지막으로 불필요한 데이터를 select에서 제거해주면 성공!
'코딩일기' 카테고리의 다른 글
알고리즘 코드카타 53 - 명예의 전당 (1) (복습) (0) | 2024.07.11 |
---|---|
SQL 코드카타 115 - Movie Rating (0) | 2024.07.11 |
SQL 코드카타 112 - Count Salary Categories (0) | 2024.07.11 |
SQL 코드카타 113 - Employees Whose Manager Left the Company (0) | 2024.07.10 |
SQL 코드카타 122 - Delete Duplicate Emails (0) | 2024.07.09 |