핵심 해석
현재 행에서 같은 부서의 바로 위 급여를 빼면 된다

LAG(salary)는 모든 행을 통째로 보지 않고, 부서별로 끊은 뒤 salary DESC 순서에서 직전 행만 붙입니다. 그래서 diff_from_higher는 "현재 급여 - 더 높은 직전 급여"가 됩니다.

salary - LAG(salary) OVER (
  PARTITION BY dept
  ORDER BY salary DESC
)
PARTITION
비교 범위를 부서별로 나눕니다. 부서가 바뀌면 이전 급여도 새로 시작합니다.
ORDER BY
급여를 높은 순서로 세우므로, 직전 행은 항상 나보다 급여가 높은 사람입니다.
순위
영업부
개발부
1위 기준점
민서 7,200
LAG = NULL 더 높은 급여가 없어서 비교 시작 행
지훈 9,000
LAG = NULL 개발부에서도 첫 행은 비어 있음
2위 직전 행 참조
도윤 6,800
prev = 7,200 diff = -400
서연 8,400
prev = 9,000 diff = -600
3위 같은 규칙 반복
하린 6,300
prev = 6,800 diff = -500
예준 7,900
prev = 8,400 diff = -500
읽는 법: PARTITION BY dept가 비교 범위를 부서 안으로 고정하고, ORDER BY salary DESC가 "누가 더 높은 급여인지"를 먼저 정합니다. 그래서 각 행은 같은 부서의 바로 위 급여와만 비교되고, 부서가 바뀌면 이전 값은 이어지지 않습니다.