2010-06-10 71 views
4

我有一個簡單的表xx如下:如何獲得SQL(多級聚合)中的平均總和?

rdate date 
rtime time 
rid integer 
rsub integer 
rval integer 
primary key on (rdate,rtime,rid,rsub) 

,我想要得到的和的值的平均值(所有時間)(所有IDS)。

通過示例表的方式,我有(有連續的相同值削除的可讀性):

rdate  rtime  rid rsub rval 
------------------------------------- 
2010-01-01 00.00.00 1  1 10 
           2 20 
         2  1 30 
           2 40 
      01.00.00 1  1 50 
           2 60 
         2  1 70 
           2 80 
      02.00.00 1  1 90 
           2 100 
2010-01-02 00.00.00 1  1 999 

我能得到我想要用的款項:

select rdate,rtime,rid, sum(rval) as rsum 
from xx 
where rdate = '2010-01-01' 
group by rdate,rtime,rid 

這給了我:

rdate  rtime  rid rsum 
------------------------------- 
2010-01-01 00.00.00 1 30 (10+20) 
         2 70 (30+40) 
      01.00.00 1 110 (50+60) 
         2 150 (70+80) 
      02.00.00 1 190 (90+100) 

如預期的那樣。

現在我想的是,也將跨時間維度平均那些值查詢,給我:

rdate  rtime ravgsum 
---------------------------- 
2010-01-01 00.00.00  50 ((30+70)/2) 
      01.00.00  130 ((110+150)/2) 
      02.00.00  190 ((190)/1) 

我使用z/OS的DB2,但如果可能的話我寧願標準的SQL 。

回答

4
select rdate,rtime,avg(rsum) as ravgsum from (
    select rdate,rtime,rid, sum(rval) as rsum 
    from xx 
    where rdate = '2010-01-01' 
    group by rdate,rtime,rid 
) as subq 
group by rdate,rtime 
+0

我沒有得到任何行從該回來了,我正要悻悻抱怨時,我注意到你已經把在'2010-06-01'出於某種原因而不是'2010-01-01'。然後我發現我在問題中做了同樣的事情:-) D'Oh!一旦我解決了(在問題和所有答案日期),它工作得很好。 – paxdiablo 2010-06-10 03:42:24

+0

哈哈,最後很高興的事情。 :) – Amber 2010-06-11 02:47:07

1

如何

select rdate,rtime, sum(rsum)/count(rsum) as sumavg 
from 
(select rdate, rtime, rid, sum(rval) as rsum 
from xx 
where rdate = '2010-01-01' 
group by rdate,rtime,rid) as subq 
group by rdate,rtime 
+0

+1幫助,但我不禁想平均會比sum/count更好。它仍然有效,所以謝謝。 – paxdiablo 2010-06-10 03:45:08