case와 grouping 함수 문제 0 1 2,874

by 날막아봐 [Oracle 기초] case grouping [2020.08.26 22:38:54]


1.jpg (102,933Bytes)
3.jpg (94,855Bytes)
2.jpg (92,590Bytes)

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 칼럼의 행들을 비교하는 건가요? 

by 마농 [2020.08.27 08:02:37]

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 는 다음 행의 값.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입