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
Vous devez vous connecter pour publier un commentaire.
2010-06-01
pour une raison quelconque, au lieu de2010-01-01
. Et puis j'ai remarqué que j'avais fait la même chose dans la question 🙂 Oh pinaise! Une fois que j'ai résolu (dans la question, toutes les réponses à ce jour), il a bien fonctionné.Haha, content que les choses travaillé à la fin. 🙂
OriginalL'auteur Amber
Comment sur
OriginalL'auteur Chris Bednarski