2012-10-26 73 views
2

我有以下查詢,總和(rev)列中的每一行除以列的總和。分組和分割Netezza

對於下面的例子總和(REV)列的總和是23193.The除以列由導出:行總和(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 

有2個問題

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日必須有記錄的只有一條線每天

請幫助解決這兩個錯誤

編號:Find column Value by dividing with sum of a column

+0

格式化日期查詢的原因是什麼? – Gregology

+1

您可以顯示一些示例輸入數據和所需的輸出。包含多個日期。 – Laurence

+0

另請參閱問題中提供的鏈接 – Gallop

回答

2

如果通過date和鴻溝想組每日總計用總和,你可以做這樣的:

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)作爲參數,它將按預期工作。

如果你想單獨客戶單獨結果,添加id到GROUP BY子句,並添加PARTITION BY id到窗口SUM(的OVER子句),像這樣:

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

瞭解更多關於OVER子句in the manual

+0

NZ 6.0支持分析函數,所以這個語法也應該在那裏工作。 –