106번에 2번 보기가 정답인데 쿼리 2번째 줄 "ELSE MIN(B.자역명) END) AS 지역" 에서
왜 MIN이 붙은 거죠? 그냥 B.지역명하고 어떤 차이가 있나요?
118번에서 예시 SQL문 4번째 줄에 (CASE WHEN START_VAL = LAG(END_VAL) OVER (PARTITION BY ID ORDER BY START_VAL, NVL(END_VAL, 99)) THEN 1 ELSE 0
-WHEN 뒤에 조건절이 나오는데 NVL(END_VAL,99)은 무슨 역할인가요? 없으면 앞에 = 조건식이 맞으면 1이고 아니면 0을 출력한다 의미가 되는거 아닌가요?
-그리고 LAG 함수에서 (EXPR, OFFSET, DEFAULT)가 ARGUMENT로 들어가는데 그냥 칼럼이 예시처럼 칼럼이 들어가 있으면 START_VAL 칼럼이 행보다 뒤에 있는 END_VAL 칼럼의 행들을 비교하는 건가요?
106. MIN(b.지역명) 에서 MIN 을 사용한 이유
- 지역명은 집계기준항목(Group by 문에 표시된 항목)이 아니므로
- 집계함수 없이 단독으로 사용할 수 없습니다.
118. NVL(end_val,99) 의 역할
- 정렬 구문에 사용되었으니 정렬을 위한 용도 이겠죠.
- start_val, end_val 로 정렬하는데 null 인 경우 99 로 치환하여 정렬
- 다만, 어차피 널은 맨 마지막에 정렬되니 NVL 은 불필요합니다.(오라클 기준, MSSQL 은 null 이 앞에 나옴)
118. LAG / LEAD 구문
- 3개 인자 중 2개는 생략 가능합니다.
- 생략 시 두번째 인자의 기본값은 1 입니다. (몇행 이전을 참조할지 결정하는 인자)
- LAG 는 이전 행의 값을 가져옵니다. 반대로 LEAD 는 다음 행의 값.