by 신고의추 [Oracle 기초] ORACLE WINDOW함수 WINDOW절 [2015.12.17 09:51:45]
안녕하세요
질문을 하루 1개씩 하는거 같은데.. 쓸데없어 보이지만 궁금해서 다음으로 넘어갈 수가 없네요.
SELECT emp_name, depart_id, salary ,SUM(salary) OVER(PARTITION BY depart_id ORDER BY salary ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) total ,SUM(salary) OVER(PARTITION BY depart_id ORDER BY salary ROWS BETWEEN 1 PRECEDING AND 3 FOLLOWING) BB FROM test_emp WHERE depart_id = 410;
위의 쿼리문은 맨앞/맨끝, 현재ROW에서 value만큼 앞/뒤의 범위가 지정이 되던데
그룹의 ROW 또는 RANGE의 범위를 고정으로 줄수는 없나요?
예를 들면, 그룹의 3번째 ROW부터 6번째 ROW 까지의 등수를 구하고싶습니다.
1,2번째와 7번째부터의 ROW의 결과에는 NULL이 나와도 상관이 없습니다.
그럴 경우 WINDOW절을 약간 수정하는 것만으로 가능한가요?
이것저것 해보니 문법이 안맞아서 그런거 같더군요.
방법이 있으면 RANGE에도 써먹을 수 있을꺼같은데 ..
서브쿼리를 사용안하고 원하는 결과값을 뽑아내고 싶습니다.
그리고 BETWEEN절을 생략하였을 때 UNBOUNDE PRECEDING/CURRENT ROW/value PRECEDING
밖에 못쓰는데 이 경우도 현재로우 기준으로 이전으로만 가던데, 반대로 다음으로는 설정못하는건가요?
value가 음수이거나 FOLLOWING는 문법에 안맞아서 안되는거 같네요.
질문1) WINDOW절에서 고정 범위를 주는법
질문2) WINDOW절의 BETWEEN미사용시 다음 ROW쪽으로 범위로 설정하는법
글 작성하다보니 가끔 키가 두번눌리는 버그가 있네요.
ㅇ이렇게 말이죠.. 또 발생했네요. 특수문자 이후 엔터했을때 이런경우같은데 확실한 조건을 모르네요.
날씨가 갑자기 엄청 추워졌네요. 감기 조심하세요 ~
질문1) WINDOW절에서 고정 범위를 주는법
ROWs 대신 RANGE 사용 가능합니다.
다만 RANGE 사용하려면 정렬항목에 수치나 날짜가 와야 하는데
위의 요구사항대로라면 그룹별 순번이 와야 하겠네요.
그룹별 순번을 구하려면 어차피 분서함수 사용해야 하고
분석함수는 중첩사용이 안되므로 인라인뷰 사용해야 합니다.
그런데 요구사항을 다시 살펴보면 ROW_NUMBER 와 DECODE 문으로 충분히 가능한 상황인듯 보이네요.
그리고 순위를 구한다고 하셨는데요.
순위함수에서는 WINDOW 구문 사용 못합니다.
질문2) WINDOW절의 BETWEEN미사용시 다음 ROW쪽으로 범위로 설정하는법
- 안되는 듯. 그냥 문법대로.