Comment voulez-vous obtenir la moyenne des sommes en SQL (multi-niveau d'agrégation)?

J'ai un tableau simplifié xx comme suit:

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

et je veux obtenir la moyenne (à travers tous les temps) de la somme (dans tous les id) des valeurs.

Par le biais d'un exemple de table, j'ai (avec consécutifs identiques valeurs masquées pour des raisons de lisibilité):

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

Je peux obtenir les sommes que je veux avec:

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

qui me donne:

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)

comme prévu.

Maintenant ce que je veux, c'est la requête qui sera également la moyenne de ces valeurs à travers la dimension de temps, ce qui me donne:

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)

Je suis de l'utilisation de DB2 pour z/OS, mais je préfère le standard SQL si possible.

OriginalL'auteur paxdiablo | 2010-06-10