본문 바로가기
[업무 지식]/MySQL

[LAG, LEAD] Exchange Seats

by 에디터 윤슬 2024. 11. 8.
 

링크

https://leetcode.com/problems/exchange-seats/description/

문제

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.

The result format is in the following example.

정답

select id,
        case when id % 2 = 0 then lag(student) over (order by id)
            else ifnull(lead(student) over (order by id), student)
            end student
from seat

 

SELECT ROW_NUMBER() OVER() as id, 
        student
FROM seat
ORDER BY IF(MOD(id, 2) = 0, id-1, id+1)

해설

  • 나누기를 하여 몫이 0인 값을 구한다. 
    • id % 2 =0
    • mod(id, 2) = 0
  • lag 및 student를 사용하여 값의 위치를 변경

새롭게 이해한 내용

LAG(expression [,offset][, default_value]) OVER over_clause

 

LAG
  • expression : 컬럼명
  • offset : 기본값은 1. window frame 상에서 몇 번째 이전 행의 값을 반환할지 결정.
  • default_value : 이전 행이 존재하지 않을 때 대체할 값. 기본값은 NULL
  • over_clause : PARTITION BY나 ORDER BY 를 Optional하게 사용 가능

 

  • order by 절에도 if 등의 조건을 걸어 순서를 변경할 수 있다.

'[업무 지식] > MySQL' 카테고리의 다른 글

[row/between] 프레임 정의  (0) 2024.11.12
[WINDOW] Restaurant Growth  (0) 2024.11.11
[UNION] Count Salary Categories  (0) 2024.11.07
[where & in] Product Sales Analysis III  (0) 2024.11.01
[where & in ] Game Play Analysis IV  (0) 2024.10.30