2012-10-26 1 views
2

다음과 같은 쿼리를 통해 합계 (rev) 열의 각 행을 열 합계로 나눕니다. 2 문제Netezza 그룹화 및 나누기

거기 (REV)/SUM (REV)

select date,id,sum(rev), 
NULLIF(rev,0)/sum(rev) over() as Divide 
from test 
where month(date) = 11 
and year(date) = 2012 
and day(date) = 02 
and id = 'Client1' 
group by date,id,rev 
having sum(rev) <> 0 
order by date 


date     id  sum(rev)  Divide 

2012-11-02 00:00:00 Client1  1562.00  0.067348 
2012-11-02 00:00:00 Client1  1.00  0.000043 
2012-11-02 00:00:00 Client1  4689.00  0.202173 
2012-11-02 00:00:00 Client1  267.00  0.011512 
2012-11-02 00:00:00 Client1  16674.00 0.718924 

요컨대 행 다음 예

는 합 (REV) 열의 합 23193.The 나누기 열에 의해 유도된다 검색 한 일 (일) 조건이 주석

1 ) 값이 wrong.It가

date    sum(rev)   Divide 
    2012-11-02 00:00:00 1.00   0.000002 
    2012-11-02 00:00:00 267.00   0.000412 
    2012-11-02 00:00:00 1562.00   0.002412 
    2012-11-02 00:00:00 4689.00   0.007241 
    2012-11-02 00:00:00 16674.00  0.025749 

2.) 나는 이후 date.So에 의해 그룹화 할 나누기 계산에 정확한 값을 제공하지 않습니다 수 있습니다 우리는 단지 2012년 2월 11일에 대한이 기록은 매일 기록의 한 줄이 있어야합니다

이 두 오류

를 해결 도와주세요

참고 : 당신이 date 및 분할에 의해 그룹화 할 경우 Find column Value by dividing with sum of a column

+0

이렇게 날짜 쿼리를 포맷하는 이유는 무엇입니까? – Gregology

+1

일부 예제 입력 데이터 및 필요한 출력을 표시 할 수 있습니까? 하나 이상의 날짜를 포함하십시오. – Laurence

+0

예를 들어 질문에 제공된 링크도 참조하십시오. – Gallop

답변

2

입니다
SELECT 
    date, 
    SUM(rev) AS total, 
    SUM(rev)/SUM(SUM(rev)) OVER() AS portion 
FROM test 
GROUP BY 
    date 
; 

SUM() OVER()의 인수가 유효한 식이어야하며, rev이 유효한 표현되지 않습니다 : 총계에 의해 매일 합계, 당신은 이런 식으로 그것을 할 수 GROUP BY 쿼리에는 rev이 포함되어 있지 않으므로 GROUP BY 쿼리에 포함되지 않습니다. 하지만 인수로 SUM(rev)을 사용할 수 있으며 사용해야하며 예상대로 작동합니다.

SELECT 
    date, 
    id, 
    SUM(rev) AS total, 
    SUM(rev)/SUM(SUM(rev)) OVER (PARTITION BY id) AS portion 
FROM test 
GROUP BY 
    date, 
    id 
; 

오버 절에 대해 자세히 알아보기 :

는이 같은) GROUP BY 절에 id을 추가하고 창 SUM (의 OVER 절에 PARTITION BY id를 추가, 별도의 클라이언트를위한 별도의 결과를 원하는 경우 in the manual.

+0

NZ 6.0은 분석 함수를 지원하므로이 구문도 제대로 작동합니다. –