DB2에서 RATIO_TO_REPORT() OVER() 함수를 쓰면 에러가 납니다. 0 6 1,161

by 안녕하세요 [SQL Query] db2 query error [2021.10.14 13:43:41]


SELECT 상품코드, 상품명, 일년, 이년, 삼년, 평균, 비율

FROM (

           SELECT 상품코드, 상품명, 

                            SUM(CASE WHEN 날짜 BETWEEN 날짜-12개월 AND 날짜 THEN 사고건수) AS 일년,

                              ........  AS 이년,

                              ........  AS 삼년,

                              ......... AS 평균

              FROM 테이블

              GROUP BY 상품 WITH ROLLUP) AS A

 

이런 쿼리 입니다.

ROW가 4개가 나오고 평균컬럼의 ROW를 합해서 각 ROW마다 비율을 구하려고 합니다. 

 

비율 컬럼에 RATIO_TO_REPORT(평균) OVER() 함수를 쓰려고 하는데 

SQL ERROR 43601 : SQL0199 KEYWORD OVER NOT EXPECTED. VALID TOKEN:),.

오류가 뜨면서 안됩니다. 

비율 컬럼을 제거하고 돌리면 값이 잘 나옵니다.

 

 왜그럴까요,,?

by 마농 [2021.10.14 14:02:26]

RATIO_TO_REPORT 는 오라클에서만 사용되는 함수입니다.
다음과 같이 바꿔 보세요.
평균 / SUM(평균) OVER() AS 비율


by 안녕하세요 [2021.10.14 14:15:44]

답변 감사합니다.

위에서 말씀해 주신 

평균 / SUM(평균) OVER() AS 비율

도 에러가 납니다. 

token SUM was not valid. Valid tokens:(.


by 마농 [2021.10.14 14:37:08]

그렇다면 분석함수 자체를 지원하지 않는 듯 하네요.
평균 합계를 따로 구해서 조인하셔야 합니다.

SELECT 상품코드, 상품명
     , 일년, 이년, 삼년
     , 평균
     , a.평균 / b.평균합계 AS 비율
  FROM (SELECT ... 평균 GROUP BY 상품) a
 CROSS JOIN (SELECT 평균합계) b  -- 그룹바이 없는 전체 집계
;

 


by 안녕하세요 [2021.10.14 16:45:38]

와우 감사합니다

이렇게 방법을 알려주셔서 감사합니다 

해결됐습니다. 

 

지금은 소수점 표시가 안되고 0으로 나오고 합만 1로 나오는데 이것만 해결하면 될거 같습니다!


by 마농 [2021.10.14 18:01:43]

MSSQL 의 경우 정수 / 정수 = 정수 가 나오던데 같은 현상 인지?
소수를 계산에 포함시켜 보세요.
1.0 * a.평균 / b.평균합계 AS 비율


by 안녕하세요 [2021.10.14 20:26:10]

와 대박이네요 되요!!

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